Ich habe einen nicht geclusterten, nicht eindeutigen Index für eine Spalte (Datum) in einer großen Tabelle (16 Millionen Zeilen) erstellt, erhalte jedoch im Vergleich zur exakt gleichen Abfrage, die erzwungen wird, sehr ähnliche Abfragegeschwindigkeiten Verwenden Sie keine Indizes.Index verringert Anzahl der gelesenen Zeilen; Keine Leistungsverbesserung
Abfrage 1 (verwendet index):
SELECT *
FROM testtable
WHERE date BETWEEN '01/01/2017' AND '03/01/2017'
ORDER BY date
Abfrage-2 (kein Index):
SELECT *
FROM testtable WITH(INDEX(0))
WHERE date BETWEEN '01/01/2017' AND '03/01/2017'
ORDER BY date
Beiden Abfragen, um die gleiche Menge an Zeit zu laufen, und das gleiche Ergebnis. Wenn Sie den Ausführungsplan für jedes Element betrachten, beträgt die Anzahl der gelesenen Zeilen von Abfrage 1
~ 4 Millionen Zeilen, wobei Abfrage 2 106 Millionen Zeilen liest. Es scheint, dass der Index funktioniert, aber ich bekomme keine Leistungsvorteile daraus.
Irgendwelche Ideen, warum dies ist, oder wie meine Abfragegeschwindigkeit in diesem Fall zu erhöhen wäre sehr geschätzt.
brauchen Sie wirklich alle Spalten? Bring nur ein paar und teste es nochmal. Sie können Spalten zum Index hinzufügen, das heißt Deckungsindex. – Horaciux
Was ist der Datentyp von 'Datum'? – Lamak
Sie verwenden den Index eindeutig nicht ausschließlich, da Sie alle Spalten einbeziehen. Das bedeutet, dass der NC-Index Ihre Abfrage nicht abdeckt. Wenn Sie also Ihren Index verwenden, kehren Sie immer noch zum Clustered-Index zurück Felder. – Eli