Questo è in realtà più difficile di quanto sembri:un tipico DBMS moderno (e MS SQL Server non fa eccezione) a volte eseguirà una scansione completa della tabella anche se l'indice è disponibile, semplicemente perché potrebbe essere più veloce su piccole quantità di dati.
Esempio:
-
L'ultima istruzione in questo esempio di SQL Fiddle può essere soddisfatto dall'indice, tuttavia il piano di query indicava chiaramente una scansione della tabella:
-
Ma se inseriamo alcuni dati , viene utilizzato l'indice:
Inoltre, la decisione presa dal DBMS può essere influenzata dalla freschezza/accuratezza del statistiche sono.
Il test più affidabile per verificare se l'indice viene utilizzato è semplicemente riempire il database con quantità rappresentative di dati e poi guarda il piano di esecuzione . E non dimenticare di cronometrare l'effettiva esecuzione della query, già che ci sei!
Un esempio semplificato:se l'intera tabella rientra in una singola pagina del database, è più veloce caricare semplicemente quella pagina e scorrerla in sequenza, piuttosto che attendere l'I/O aggiuntivo per la pagina contenente l'indice.