大規模なテーブル(1600万行)の列(日付)にクラスタ化されていない一意でないインデックスが作成されましたが、インデックスを使用しないでください。索引行の数が減少します。パフォーマンスが向上しない
クエリ1(インデックスを使用):
SELECT *
FROM testtable
WHERE date BETWEEN '01/01/2017' AND '03/01/2017'
ORDER BY date
クエリ2(NO指数):両方のクエリが実行され、同じ結果を返すために同じ時間がかかる
SELECT *
FROM testtable WITH(INDEX(0))
WHERE date BETWEEN '01/01/2017' AND '03/01/2017'
ORDER BY date
。それぞれの実行計画を見ると、クエリ1の行数は
〜400万行で、クエリ2は1億600万行を読み込んでいます。インデックスは機能しているようですが、パフォーマンス上のメリットはありません。
これがなぜであるか、またはこの場合のクエリスピードを上げる方法については、何か考えてください。
あなたが本当にすべての列が必要なのでしょうか?わずかしか持ってこないでもう一度試してみてください。インデックスに列を追加することができます。これは、カバーインデックスと呼ばれます。 – Horaciux
'date'のデータ型は何ですか? – Lamak
すべての列をインポートしているので、インデックスを排他的に使用しているわけではありません。つまり、NCインデックスはクエリをカバーしていないため、インデックスは使用されていますが、フィールド。 – Eli