SQL Server 2005 Clustered Index Abfragegeschwindigkeit
-
05-07-2019 - |
Frage
Unsere Seiten sind immer ziemlich hart geschlagen, so dass wir einen Blick in die Optimierung einige unserer bestehenden Abfragen einnehmen.
Während dieser Blick in wir über mehrere Abfragen, deren Ausführungsplan lief war etwa 4-5 mal schneller als eine einfache Referenz des Clustered-Index ist in der Abfrage ... zum Beispiel
Wenn dies ist die alte Abfrage:
SELECT ...
FROM myTable
WHERE categoryID = @category
Die folgende Abfrage würde 4 mal schneller nach dem Ausführungsplan in SSMS:
SELECT ...
FROM myTable
WHERE categoryID = @category
AND lotID = lotID
Wir können keinen Sinn zu machen scheinen, wie dies die Abfrage schneller machen würde. Der Clustered-Index ist auf LosID aber seit seinem einem Vergleich gegen mich selbst zu tun, wie der Nachschlag ist?
Lösung
scheint ziemlich offensichtlich für mich,
Ihre erste Abfrage wird durch den Clustered-Index nicht abgedeckt, während der zweite ist seit LosID nicht in der WHERE-Klausel der ersten Abfrage
Sie können SQL Server abdeckt Indizes lesen möchten zu sehen, wie das alles funktioniert
Sie müssen auch verstehen, dass ein Clustered-Index werden die Daten, werden alle Daten für eine Tabelle in der Clustered-Index ist. wenn Sie einen nicht gruppierten Index auf Tabelle erstellen, die einen Clustered-Index hat dann der nicht gruppierten Index einen Zeiger auf den gruppierten Index haben (denn das ist, wo der Rest der Daten), wenn Sie Ihre Anfrage vollständig durch die nicht erfüllen können geclustert Index und in diesem Fall nur die nicht gruppierten Index verwendet wird ... ich abschweifend stoppt jetzt
EDIT
Ich las UND LosID = @lotID NICHT UND LosID = LosID
Manchmal kann man fälschen aus einem Clustered-Index, indem Sie in dem LosID> 0 (Kommissionierung die niedrigste Zahl, die Sie haben) und Sie erhalten eine Such
Wenn Sie also kleinste LosID = 1 und fügen Sie UND LosID> 0
Sie könnte auch ein anstelle eines Scan sehen wollen, zeige ich WHERE Indexwert> '' in diesem Beitrag Ist ein Index sucht immer besser oder schneller als ein Index-scan?