Index Seek vs. Clustered Index Scan - Warum wird der Scan gewählt?

8

Die folgende Abfrage verwendet eine Indexsuche für einen Index in der LastModifiedTime-Spalte.

%Vor%

Die folgende Abfrage, die fast identisch mit der obigen Abfrage ist, verwendet einen Clustered-Index-Scan anstelle des Indexes für LastModifiedTime. Kann mir jemand sagen warum? Und was noch wichtiger ist, was ich tun kann, um SQL Server dazu zu bringen, den Index für die LastModifiedTime-Spalte zu verwenden, ohne einen Indexhinweis.

%Vor%     
Randy Minder 05.03.2010, 17:36
quelle

2 Antworten

6
  

Die Abfrage, die fast identisch mit der obigen Abfrage ist, verwendet einen Clustered-Index-Scan anstelle des Index für LastModifiedTime . Kann mir jemand sagen warum?

Die folgende Abfrage kennt die Werte der Parameter beim Erstellen des Plans nicht und nimmt an, dass im Allgemeinen der Clustered-Index-Scan besser ist.

  

Und was noch wichtiger ist, was ich tun kann, um SQL Server dazu zu bringen, den Index für die Spalte LastModifiedTime zu verwenden, ohne einen Indexhinweis zu verwenden.

%Vor%

Alternativ können Sie OPTION (RECOMPILE) hinzufügen, wodurch bei jeder Ausführung der Abfrage ein anderer Ausführungsplan erstellt wird, wobei die Parameterwerte in das Konto übernommen werden ( parameter sniffing ).

Dies garantiert jedoch nicht, dass der Index verwendet wird.

    
Quassnoi 05.03.2010, 17:43
quelle
6

Sie können mit sp_create_plan_guide einen Planleitfaden erstellen. Weitere Informationen finden Sie unter Optimieren von Abfragen in bereitgestellten Anwendungen mithilfe von Planleitfäden . Ein Planleitfaden hilft dem Optimierer bei der Entscheidung, ob er den Indexbereichs-Suchlauf oder den gruppierten Suchlauf verwenden möchte.

    
Remus Rusanu 05.03.2010 19:27
quelle

Tags und Links