[解決済み】インデックスのカラムの順番はどのくらい重要ですか?
2022-04-13 23:44:25
質問
インデックス宣言の先頭に、最も選択されるカラムを置くと良いと聞いたのですが、どうでしょうか? 例
CREATE NONCLUSTERED INDEX MyINDX on Table1
(
MostSelective,
SecondMost,
Least
)
まず、私の言っていることは正しいのでしょうか? もしそうなら、インデックスのカラムの順番を並べ替えることでパフォーマンスに大きな違いが出る可能性がありますか?それとも、「やってよかった」と思えるようなことですか?
DTAでクエリを実行したところ、既存のインデックスとほぼ同じカラムを持つ、順番が異なるだけのインデックスを作成するよう勧められたため、質問させていただきました。 私は、既存のインデックスに不足しているカラムを追加して、それを良いことにすることを検討していました。 どうでしょうか?
どのように解決するのですか?
このようなインデックスを見てください。
Cols
1 2 3
-------------
| | 1 | |
| A |---| |
| | 2 | |
|---|---| |
| | | |
| | 1 | 9 |
| B | | |
| |---| |
| | 2 | |
| |---| |
| | 3 | |
|---|---| |
Aを最初の列として制限することで、2番目の列を最初に制限するよりも多くの結果が排除されることがわかりますか? 1列目、2列目...とインデックスを横断していく様子を思い浮かべるとわかりやすいでしょう。1回目のパスで結果の大部分を取り除くことで、2回目のステップをより速くできることがわかります。
もうひとつ、カラム3についてクエリを実行した場合、オプティマイザはインデックスを使用しません。なぜなら、結果セットを絞り込むのに全く役に立たないからです。 クエリではいつでも、次のステップに進む前に処理する結果の数を絞り込むことが、パフォーマンスの向上につながるのです。
インデックスもこの方法で保存されるので、クエリーを実行する際に、最初のカラムを見つけるためにインデックスを遡る必要がありません。
要するに、見せかけではなく、実際にパフォーマンス上の利点があるのです。
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQLのSELECTでIF...THENを実行するにはどうすればよいですか?
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
-
[解決済み】マルチインデックスとマルチカラムインデックスの比較
最新
-
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 FOR EACH ループ
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] SQL Server - 挿入された行のIDを取得するための最良の方法は?
-
[解決済み] SQL Serverでストアドプロシージャ内のテキストを検索する
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み] SQL Serverには、.NETのMath.Maxのような2つの値を取るMax関数はありますか?
-
[解決済み] Count()で条件を指定することは可能ですか?
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
-
[解決済み] SQL Serverで、ある日付より大きいすべての日付を照会するにはどうすればよいですか?
-
[解決済み] VARCHARとCHARの違いは何ですか?