[解決済み】マルチインデックスとマルチカラムインデックスの比較
質問
複数の列に対して1つのインデックスを作成するのと、複数のインデックスを作成するのとでは、どのような違いがあるのでしょうか? につき カラムは?
どちらを使うべきかの理由はありますか?
例えば、こんな感じです。
Create NonClustered Index IX_IndexName On TableName
(Column1 Asc, Column2 Asc, Column3 Asc)
バーサス
Create NonClustered Index IX_IndexName1 On TableName
(Column1 Asc)
Create NonClustered Index IX_IndexName2 On TableName
(Column2 Asc)
Create NonClustered Index IX_IndexName3 On TableName
(Column3 Asc)
解決方法は?
に同意します。 ケイド・ルー .
この記事を読めば、正しい方向に進むことができるはずです。
1つ注意すべき点は、クラスタ化インデックスの最初のカラムはユニークキー(IDカラムを推奨)であるべきだということです。 基本的に、これはデータがインデックスの最後に挿入されるのを助け、ディスクIOやページ分割を大量に発生させないようにするためです。
次に、データに対して他のインデックスを作成する場合、それらが巧みに構築されていれば、それらは再利用されます。
例:あるテーブルを3つのカラムで検索するとします。
州、郡、郵便番号
- をクリックすると、都道府県名だけで検索できる場合があります。
- 州、郡で検索することもあります。
- 州、郡、郵便番号で頻繁に検索します。
そうすると、state, county, zip.を含むインデックスが、この3つの検索で使われることになります。
zipだけで検索することが多い場合、zipはインデックスの3番目の部分であり、クエリオプティマイザはそのインデックスを有用とは見なさないため、上記のインデックスは(いずれにせよSQL Serverによって)使用されないでしょう。
そこで、この例で使用するZipだけのインデックスを作成することができます。
ちなみに 多列インデックスの場合、インデックスの最初の列は常に検索に使えるという事実を利用することができます。 また、「状態」のみで検索する場合は、効率的ですが、「状態」に対する単一列インデックスほど効率的ではありません。
よく使うクエリのwhere節やgroup byに依存するというのが、お探しの答えでしょうか。
この記事はとても役に立ちます :-)
関連
-
[解決済み] 結果を分割するためのSQLの小数点以下の値
-
[解決済み] 階層テーブルの設計
-
[解決済み] 一括読み込みができません。オペレーティングシステムのエラーコード5(アクセスが拒否されました。)
-
[解決済み] シンプルに保つ、クエリで複数のCTEを行う方法
-
[解決済み] 日付から年内の週番号を取得する
-
[解決済み] SQL ServerにおけるXOR
-
[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQL Serverで小数点の後に2桁の数字を表示させる方法
-
[解決済み] Microsoft OLE DB Provider for SQL Server エラー '80040e14' '=' 付近の構文が正しくない
-
[解決済み] SSISで新しいレコードを挿入する前に、宛先テーブルを空にするにはどうすればよいですか?
-
[解決済み] Sqlサーバーに制約が存在するかどうかを確認する方法は?
-
[解決済み] BCP - IDENTITY列を持つテーブルにインポートする際、キャスト指定に無効な文字値がある。
-
[解決済み] データセットに対するSSRSクエリの実行に失敗しました
-
[解決済み] シンプルに保つ、クエリで複数のCTEを行う方法
-
[解決済み] 文字列から特定の文字を削除する
-
[解決済み] SQL Server : varchar を INT に変換する。
-
[解決済み] SQL Server Management StudioでIntelliSenseが機能しない