Ci sono alcuni concetti e termini che sono importanti da capire quando si tratta di indici. Ricerche, scansioni e ricerche sono alcuni dei modi in cui gli indici verranno utilizzati tramite istruzioni selezionate. La selettività delle colonne chiave è fondamentale per determinare l'efficacia di un indice.
Una ricerca si verifica quando lo Strumento per ottimizzare le query di SQL Server determina che il modo migliore per trovare i dati richiesti è la scansione di un intervallo all'interno di un indice. Le ricerche in genere si verificano quando una query è "coperta" da un indice, il che significa che i predicati di ricerca si trovano nella chiave dell'indice e le colonne visualizzate sono nella chiave o incluse. Una scansione si verifica quando lo Strumento per ottimizzare le query di SQL Server determina che il modo migliore per trovare i dati è scansionare l'intero indice e quindi filtrare i risultati. Una ricerca si verifica in genere quando un indice non include tutte le colonne richieste, nella chiave dell'indice o nelle colonne incluse. Query Optimizer utilizzerà quindi la chiave cluster (rispetto a un indice cluster) o il RID (rispetto a un heap) per "cercare" le altre colonne richieste.
In genere, le operazioni di ricerca sono più efficienti delle scansioni, a causa della query fisica di un set di dati più piccolo. Ci sono situazioni in cui non è così, come un set di dati iniziale molto piccolo, ma che va oltre lo scopo della tua domanda.
Ora, hai chiesto come determinare l'efficacia di un indice e ci sono alcune cose da tenere a mente. Le colonne chiave di un indice cluster sono chiamate chiavi cluster. Ecco come i record sono resi unici nel contesto di un indice cluster. Tutti gli indici non cluster includeranno la chiave cluster per impostazione predefinita, al fine di eseguire ricerche quando necessario. Tutti gli indici verranno inseriti, aggiornati o eliminati per ogni rispettiva istruzione DML. Detto questo, è meglio bilanciare i guadagni in termini di prestazioni in dichiarazioni selezionate rispetto a risultati positivi nelle istruzioni di inserimento, eliminazione e aggiornamento.
Per determinare l'efficacia di un indice, è necessario determinare la selettività delle chiavi dell'indice. La selettività può essere definita come una percentuale di record distinti rispetto ai record totali. Se ho una tabella [person] con 100 record totali e la colonna [first_name] contiene 90 valori distinti, possiamo dire che la colonna [first_name] è selettiva al 90%. Maggiore è la selettività, più efficiente è la chiave di indice. Tenendo presente la selettività, è meglio inserire prima le colonne più selettive nella chiave di indice. Usando il mio esempio [persona] precedente, se avessimo una colonna [last_name] selettiva al 95%? Vorremmo creare un indice con [last_name], [first_name] come chiave dell'indice.
So che questa è stata una risposta un po 'prolissa, ma ci sono davvero molte cose che determinano l'efficacia di un indice e molte cose su cui devi valutare qualsiasi miglioramento della performance.