Sarà SQL Server utilizza un indice composto quando solo una singola colonna è nella clausola WHERE?

StackOverflow https://stackoverflow.com/questions/2228192

Domanda

Di 'Ho una tabella:

CREATE TABLE Users (
    Id INT IDENTITY (1, 1),
    FirstName VARCHAR(40),
    LastName VARCHAR(40)
)

Le query sono di solito su FirstName o Cognome , ma anche su FirstName e Cognome .

Se creo un indice non cluster su FirstName e un altro su Cognome , quindi i miei primi due query sono soddisfatti. A quanto pare, SQL Server utilizzerà indice intersezione per l'altra query.

In alternativa, se ho indexees su (FirstName) e (Cognome, Nome), può / non SQL Server utilizzare il secondo indice per le query su un solo Cognome , così come query su entrambi?

Lo parti indice composto negozio di SQL Server da sinistra a destra o da destra a sinistra? In altre parole: sarà costruire la chiave come LastNameFirstName o NomeCognome? O è libero di scegliere uno arbitrariamente?

È stato utile?

Soluzione

  

può / non SQL Server utilizza l'indice (Cognome, Nome) per le query sul proprio Cognome ea domande su entrambi?

Sì, il database verrà utilizzare l'indice (Cognome, Nome) per le query su Cognome. Sarà non utilizzare questo indice per le query solo su FirstName però.

  

Lo fa parti indice composto negozio da sinistra a destra o da destra a sinistra?

L'immagazzinaggio è in un B-Tree . Se si pensa di esso come essere immagazzinato da destra a sinistra o solo un aiuto di visualizzazione utile da sinistra a destra è, e non legati alla memorizzazione dei dati reali.

Altri suggerimenti

Sì, se si esegue una query su Cognome da solo dovrebbe utilizzare l'indice (Cognome, Nome). Quindi sarebbe essere utilizzato sia quando si interroga da LastName da solo, o Nome + Cognome insieme.

Direttiva generale è quello di garantire la colonna con la massima selettività compare prima nell'indice composto come questo fornisce il massimo beneficio / restringe del risultato giù prima prima della successiva, colonne meno selettivi.

A seconda della query reale si sta inviando, un indice composito su due colonne può essere utilizzato anche se si cerca il secondo unica colonna. Tuttavia, non sarà possibile ottenere un indice di ricerca, ma più probabilmente un indice scansione. Se questo è "abbastanza buono" per voi, dipende dal vostro ambiente specifico. L'indicizzazione è più di un'arte che una scienza e un sacco di diversi fattori influenzano la vostra decisione su come indice di una tabella. E 'sempre un trade-off come avere troppi indici su un tavolo è proprio così male come avere troppo pochi. Assicuratevi che le vostre domande più cruciali sono coperti bene e poi decidere su un caso per caso se un indice aggiuntivo vale il suo costo.

Inoltre, in quanto non è stato ancora menzionato e ha fornito sei almeno su SQL Server 2005: Fammi gettare nella clausola INCLUDE per gli indici non cluster. Si tratta di un trascurato, ma molto utile aggiunta a qualsiasi strategia di indicizzazione.

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