Domanda

I nostri siti vengono picchiati piuttosto forte, quindi stiamo esaminando l'ottimizzazione di alcune delle nostre query esistenti.

Durante l'esame, abbiamo riscontrato diverse query il cui piano di esecuzione era circa 4-5 volte più veloce quando nella query è presente un semplice riferimento all'indice cluster ... ad esempio

Se questa era la vecchia query:

SELECT ...
FROM myTable
WHERE categoryID =  @category 

la seguente query sarebbe 4 volte più veloce secondo il piano di esecuzione in SSMS:

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

Non possiamo sembrare sensati su come questo renderebbe la query più veloce. L'indice cluster è su lotID ma dato che sta facendo un confronto con se stesso, come può essere d'aiuto?

È stato utile?

Soluzione

mi sembra abbastanza ovvio

la tua prima query non è coperta dall'indice cluster mentre la seconda è poiché lotID non è nella clausola WHERE della prima query

Potresti voler leggere SQL Server che copre gli indici per vedere come funziona tutto

devi anche capire che un indice cluster È i dati, tutti i dati per una tabella sono nell'indice cluster. quando si crea un indice non cluster sulla tabella che ha un indice cluster, l'indice non cluster avrà un puntatore all'indice cluster (poiché è lì che si trova il resto dei dati) a meno che non sia possibile soddisfare completamente la query da parte dei non cluster indice e in quel caso verrà utilizzato solo l'indice non cluster ... Adesso smetterò di divagare

Modifica

Ho letto AND lotID = @lotID NOT AND lotID = lotID

a volte puoi falsificare un indice cluster facendo lotID > 0 (selezionando il numero più basso che hai) e otterrai una ricerca

Quindi se il tuo lotID più piccolo = 1 e aggiungi E lotID > 0

potresti anche vedere una ricerca invece di una scansione, dimostrerò DOVE IndexValue > '' in questo post La ricerca di un indice è sempre migliore o più veloce di una scansione di indice?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top