Considerare questi tre quesiti:Perché le prestazioni diminuiscono quando si utilizza un campo non indicizzato nella clausola SELECT?
select sampleno from sample
where markupdate > '1/1/2010'
select sampleno, markupdate from sample
where markupdate > '1/1/2010'
select sampleno, markuptime from sample
where markupdate > '1/1/2010'
sampleno
e markupdate
campi sono indicizzati (sampleno
è la chiave primaria)
markuptime
non è indicizzato
Query 1 e 2 richiede circa 1 secondo per eseguire (restituendo 237K righe). Query 3 è ancora in esecuzione dopo 3 minuti.
Perché l'inclusione di un campo non indicizzato nella clausola SELECT causa un tale peggioramento delle prestazioni?
Questo è un database SQL 6.5.
C'è qualcosa che posso fare alla query per includere temporaneamente markuptime in un indice o devo creare un indice per la tabella che include markuptime? – blueshift
Puoi aggiungere un INCLUDE per includere MarkupTime sul tuo indice non in cluster su MarkUpdate, questo ti darà un "indice di copertura" per la terza query. (Non importa, potresti farlo se avessi una versione più recente di SQL ... Immagino di aggiungere MarkupTime come un'altra colonna all'indice MarkUpdate.) –