主キーを持たないテーブルがあります。データはすでに存在します。非クラスター化インデックスを作成しました。しかし、クエリを実行すると、実際の実行計画にインデックス スキャンが表示されません。非クラスター化インデックスが機能していないと思います。その理由は何でしょう。私を助けてください
2 に答える
まず第一に、なぜ主キーがないのですか?? 主キーがない場合、それはテーブルではありません- 追加するだけです! それは非常に多くのレベルで役立ちます....
次に、インデックスがある場合でも、SQL Server クエリ オプティマイザーは常にクエリを調べて、インデックスを使用する意味があるかどうかを判断します。すべての列と行の大部分を選択すると、インデックスを使用しても意味がありません。
したがって、避けるべきことは次のとおりです。
SELECT * FROM dbo.YourTable
インデックスを使用しないことがほぼ保証されていますWHERE
クエリに適切な句がない場合- インデックスが実際にはデータのごく一部を選択しない列にある場合。ブール列のインデックス、または
Gender
最大 3 つの異なる値を持つ列はまったく役に立ちません
テーブル構造、それらのテーブルに含まれるデータ、行数、および実行しているクエリの種類について詳しく知らなければ、誰もあなたの質問に答えることができません-それはあまりにも広すぎます....
更新:主キーとは異なるテーブルにクラスター化インデックスを作成する場合は、次の手順を実行します。
1) まず、テーブルを設計します。2) 次に、インデックス デザイナーを開きます。選択した列に新しいクラスター化インデックスを作成します。注意してください-これは主キーではありません!
3)その後、主キーをID
列に配置できます-インデックスが作成されますが、そのインデックスはクラスター化されていません!
これ以上の情報がなければ、その理由はテーブルが小さすぎてインデックス シークに値しないからだと思います。
テーブルの行数が数千行未満の場合、SQL Server はほとんどの場合、そのテーブルのインデックスに関係なく、テーブル/インデックス スキャンを選択します。これは、インデックス スキャンの方が実際には高速であるためです。
インデックス スキャン自体は、必ずしもパフォーマンスの問題を示しているわけではありません。クエリが実際に遅いのでしょうか。