4 Stimmen

SQL Server 2005 Clustered Index Abfragegeschwindigkeit

Unsere Websites werden ziemlich stark beansprucht, weshalb wir einige unserer bestehenden Abfragen optimieren wollen.

Während wir dies untersuchten, stießen wir auf mehrere Abfragen, deren Ausführungsplan etwa 4-5 Mal schneller war, wenn ein einfacher Verweis auf den geclusterten Index in der Abfrage enthalten war... zum Beispiel

Wenn dies die alte Abfrage war:

SELECT ...
FROM myTable
WHERE categoryID =  @category 

wäre die folgende Abfrage laut dem Ausführungsplan in SSMS viermal schneller:

SELECT ...
FROM myTable
WHERE categoryID =  @category 
AND lotID = lotID

Wir können uns nicht vorstellen, wie die Abfrage dadurch schneller werden soll. Der geclusterte Index ist auf lotID aber da seine tun einen Vergleich gegen sich selbst, wie ist dies hilfreich?

6voto

SQLMenace Punkte 128184

Scheint mir ziemlich offensichtlich zu sein

Ihre erste Abfrage wird nicht vom geclusterten Index abgedeckt, die zweite hingegen schon, da lotID nicht in der WHERE-Klausel der ersten Abfrage enthalten ist.

Vielleicht möchten Sie lesen SQL Server deckt Indizes ab um zu sehen, wie das alles funktioniert

Sie müssen auch verstehen, dass ein geclusterter Index die Daten IST, alle Daten für eine Tabelle im geclusterten Index sind. wenn Sie einen nicht geclusterten Index auf Tabelle erstellen, die einen geclusterten Index dann hat, hat der nicht geclusterte Index einen Zeiger zum geclusterten Index (da das ist, wo der Rest der Daten ist), es sei denn Sie Ihre Abfrage vollständig durch den nicht geclusterten Index erfüllen können und in diesem Fall nur der nicht geclusterte Index verwendet wird... Ich höre jetzt auf zu schweifen

エディテージ

Ich lese AND lotID = @lotID NOT AND lotID = lotID

Manchmal kann man einen geclusterten Index vortäuschen, indem man where lotID >0 (die niedrigste Zahl, die man hat) auswählt, und man erhält eine Suche

Wenn also Ihre kleinste LotID = 1 ist und Sie Folgendes hinzufügen AND lotID > 0

Sie könnten auch einen Suchlauf anstelle eines Scans sehen, ich demonstriere WHERE IndexValue > '' in diesem Beitrag Ist eine Indexsuche immer besser oder schneller als ein Index-Scan?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X