-1

私はモバイルアプリケーションのバックエンドに取り組んでいます。アプリのテーブル構造を作成しました。

作成したテーブルにインデックスを実装するにはどうすればよいですか? SQL には 2 種類のインデックスがあることを知っています。クラスター化および非クラスター化。

私の懸念は

  1. テーブルにはどのタイプのインデックスを提供する必要がありますか?
  2. インデックスを作成する必要がある列はどれですか?
  3. 「一意の識別子」タイプの列にインデックスを適用する必要がありますか?
  4. 主キー列にインデックスを適用する必要がありますか?
  5. インデックス作成のパフォーマンスを評価するにはどうすればよいですか?

どんな助けでも大歓迎です

4

2 に答える 2

5

テーブルにクラスター化インデックスを配置することを常にお勧めします-これにより、すべてが高速になります(これに関するKimberly Trippのブログ投稿を参照してください)。

適切なクラスター化インデックスは次のとおりです。

  • 狭い
  • 個性的
  • 安定
  • 増え続ける

したがって、列のようなものID INT IDENTITYはそのように完璧です (繰り返しますが、これらのプロパティがクラスタリング インデックスにとって非常に重要である理由については、Kimberly Tripp のブログ投稿を参照してください)。

次に、すべての外部キー列に非クラスター化インデックスを配置します。これにより、参照整合性に関連する JOIN やその他の操作が高速化されます。

次に停止します - アプリを実行させ、観察し、パフォーマンスを測定します。どのように動作しますか?プロファイル ログを取得して、どのクエリが実行され、どのクエリが I/O や CPU 時間に過度に負荷をかけているかを確認します。

次に、それらのクエリに取り掛かり、最適化します。おそらく、1 つまたは 2 つのクエリを高速化するために、あちこちにインデックスを追加します。それから観察と測定を繰り返します - 無限に繰り返します。

詳細については、 Kimberly Tripp のブログを読み、カンファレンスでの彼女のプレゼンテーションのビデオをご覧ください。彼女は SQL Server のインデックス作成の女王あり、彼女の知識と洞察は膨大で貴重です。彼女のものを読んで、熟考してください-それを使用してください。

于 2012-11-27T13:02:17.530 に答える
0

テーブルの場合、SQL 2008 以降から 1 つのクラスター化インデックスと 999 個の非クラスター化インデックスを作成できます。

テーブルのいずれかの列に主キーが含まれている場合、自動的にクラスター化インデックスが作成されることに注意してください。テーブルに主キーが含まれていない場合は、整数データ型の列にクラスター化インデックスを作成します。テーブルに一意制約が含まれている場合、自動的に非クラスター化インデックスがそれらの一意制約列に作成されることに注意してください。

最後に、テーブルに主キーが含まれていない場合は、整数データ型の列にクラスター化インデックスを作成します。

次に、テーブルに一意の制約が含まれている場合、非クラスター化インデックスが自動的に作成されます。それ以外の場合はそのままにしておきます。つまり、非クラスター化インデックスを作成しないでください。非クラスター化インデックスが多すぎると、将来的にパフォーマンスの問題が発生するためです。日々データが増えていきます。

テーブルを作成したら、クエリでこのテーブルを使用します。これらのクエリでは、 where condition を記述できます。 where condition 列に対してのみ、非クラスター化インデックスを作成する必要があります。

テーブルにクラスター化インデックスが含まれていない場合、非クラスター化インデックスではパフォーマンスの向上を期待できないことに常に注意してください。

もう 1 つのポイントは、テーブルごとに 1 つのクラスター化インデックスと最大 5 ~ 7 個の非クラスター化インデックスを常に使用することです。

テーブル内のすべての列に対して非クラスター化インデックスを作成しないでください。

于 2012-11-27T13:15:22.587 に答える