私は、演算子がより小さいか大きいかでクエリを実行すると、SQL Serverのインデックスが正しく動作しないことがわかりました。SQL Serverのインデックスのオペレータの問題より小さい
SELECT *のTestTable FROM WHERE ICOUNT = 10:私はこれでテーブルを照会、今
Column Name, column type, primary Key, index iID, int, yes, cluster index iCount, int, no, non-cluster index name, nvarchar(255), no, no index
:
は、私はこのようなだけで2列に単純なテーブル(のTestTableを)持っていると言います
非常に良いですが、Sqlサーバーは、列iCountの非クラスタインデックスを使用して結果を取得します。
しかし、私はこれでテーブルを照会場合:
IIDのためのクラスタ索引にオーバーインデックス・スキャンを行いますSELECT *のTestTable FROM WHERE ICOUNT < 10、
SQL Serverの結果を取得します。
クエリで演算子がより小さいかより大きい場合、SQL Serverが適切なインデックスを使用できないのはなぜかと思います。
クラスター化されたインデックスを、化合物 '(iCount、iID)' **にその順序で変更することを検討してください**。 – onedaywhen
または、主キーの性質を変更する必要がないiCountの非クラスタ化インデックスに「名前」をインクルード列として追加できます。 – hatchet