L'ordine della colonna in cui la clausola deve essere uguale all'ordine dell'indice?


8

Stavo leggendo questo use-the-index-luke.com che spiega in dettaglio come funzionano gli indici. Una delle cose che questa persona ha ribadito che l'ordine degli indici è molto importante e per velocizzare la query le colonne della clausola where dovrebbero essere uguali a quelle dell'indice. Oggi, stavo solo confermando questa teoria e ho creato una tabella (id int, nome nvarchar (100)) su SQL Server 2008. Ho inserito circa 5000 righe in esso e creato un indice create index abc on test (name, id )

e ha lanciato la query

select ID, name 
from test 
where ID = 10
and name = '10'

Mi aspettavo che una scansione della tabella completa fosse seguita da una selezione nel piano di query, ma con mia sorpresa l'output del piano era una scansione di indice seguita da select. Piano di query

Quindi, la mia domanda è: l'ordine delle colonne nella clausola Where è importante o SQL Server le riorganizza secondo la definizione dell'indice?

Grazie !!


3
Il piano di esecuzione da te testato non risponde alla domanda?
ypercubeᵀᴹ

Sì !! Ma volevo un parere di esperti e in casi questo può fallire. Grazie !!
Egalitario,

1
Domanda simile per MySQL: in MySQL, l'ordine delle colonne in una clausola WHERE influisce sulle prestazioni della query? L'ottimizzatore di SQL Server è di qualche livello superiore a quello di MySQL.
ypercubeᵀᴹ

Risposte:


13

Quindi, la mia domanda è: l'ordine delle colonne nella clausola Where è importante

No. L'ordine delle colonne nella WHEREclausola non ha alcuna importanza.


10

Prima di tutto, l' DROPistruzione nella finestra della query chiaramente non è stata eseguita, ma per motivi di spiegazione, cercherò di rispondere a ciò che hai chiesto.


Pensa agli indici come faresti con una rubrica: le voci sono ordinate per Cognome, quindi per Nome. (Questo è l' ordine delle chiavi dell'indice .)

Se ti chiedessi di trovare tutti i numeri di telefono delle persone con il cognome "Davis", passeresti alla pagina appropriata e leggeresti i numeri. (Questa è una ricerca di indice .)

Se ti chiedo di trovare tutti i numeri di telefono delle persone con il nome "Janice", dovresti guardare tutte le pagine per trovarle tutte. (Questa è una scansione dell'indice .)

Se ti do sia un nome che un cognome, potresti trovare quella voce molto rapidamente, proprio come il primo esempio, perché è ovvio che useresti il ​​cognome per trovare la pagina giusta, quindi il nome per trova la voce esatta. Non importa quale ordine ti abbia fornito le informazioni, purché ti abbia dato sia un nome che un cognome.

Query Optimizer di SQL Server funziona allo stesso modo. In base all'ordine delle chiavi dell'indice, determina automaticamente il modo più efficiente per recuperare i dati richiesti, indipendentemente dall'ordine delle condizioni nella WHEREclausola.


Ottima spiegazione della scansione dell'indice e della ricerca dell'indice.
Neelam,

0

L'ordine delle colonne sull'indice è importante ma non nell'ordine dei valori andati nella whereclausola.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.