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?

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top