2

主キーを持たないテーブルがあります。データはすでに存在します。非クラスター化インデックスを作成しました。しかし、クエリを実行すると、実際の実行計画にインデックス スキャンが表示されません。非クラスター化インデックスが機能していないと思います。その理由は何でしょう。私を助けてください

4

2 に答える 2

5

まず第一に、なぜ主キーがないのですか?? 主キーがない場合、それはテーブルではありません- 追加するだけです! それは非常に多くのレベルで役立ちます....

次に、インデックスがある場合でも、SQL Server クエリ オプティマイザーは常にクエリを調べて、インデックスを使用する意味があるかどうかを判断します。すべての列と行の大部分を選択すると、インデックスを使用しても意味がありません。

したがって、避けるべきことは次のとおりです。

  • SELECT * FROM dbo.YourTableインデックスを使用しないことがほぼ保証されています
  • WHEREクエリに適切な句がない場合
  • インデックスが実際にはデータのごく一部を選択しない列にある場合。ブール列のインデックス、またはGender最大 3 つの異なる値を持つ列はまったく役に立ちません

テーブル構造、それらのテーブルに含まれるデータ、行数、および実行しているクエリの種類について詳しく知らなければ、誰もあなたの質問に答えることができません-それはあまりにも広すぎます....

更新:主キーとは異なるテーブルにクラスター化インデックスを作成する場合は、次の手順を実行します。

1) まず、テーブルを設計します。2) 次に、インデックス デザイナーを開きます。選択した列に新しいクラスター化インデックスを作成します。注意してください-これは主キーではありません!

代替テキスト

3)その後、主キーをID列に配置できます-インデックスが作成されますが、そのインデックスはクラスター化されていません!

代替テキスト

于 2010-12-07T06:35:09.613 に答える
1

これ以上の情報がなければ、その理由はテーブルが小さすぎてインデックス シークに値しないからだと思います。

テーブルの行数が数千行未満の場合、SQL Server はほとんどの場合、そのテーブルのインデックスに関係なく、テーブル/インデックス スキャンを選択します。これは、インデックス スキャンの方が実際には高速であるためです。

インデックス スキャン自体は、必ずしもパフォーマンスの問題を示しているわけではありません。クエリが実際に遅いのでしょうか。

于 2010-12-07T06:43:44.287 に答える