Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Quanto è importante l'ordine delle colonne negli indici?

Guarda un indice come questo:

Cols
  1   2   3
-------------
|   | 1 |   |
| A |---|   |
|   | 2 |   |
|---|---|   |
|   |   |   |
|   | 1 | 9 |
| B |   |   |
|   |---|   |
|   | 2 |   |
|   |---|   |
|   | 3 |   |
|---|---|   |

Vedi come limitare prima su A, poiché la tua prima colonna elimina più risultati rispetto a limitare prima la tua seconda colonna? È più facile se immagini come deve essere attraversato l'indice, colonna 1, quindi colonna 2, ecc ... vedi che tagliare la maggior parte dei risultati nel primo passaggio rende il secondo passaggio molto più veloce.

Un altro caso, se hai eseguito una query sulla colonna 3, l'ottimizzatore non userebbe nemmeno l'indice, perché non è affatto utile per restringere i set di risultati. Ogni volta che sei in una query, restringere il numero di risultati da gestire prima del passaggio successivo significa prestazioni migliori.

Poiché anche l'indice viene archiviato in questo modo, non è possibile tornare indietro nell'indice per trovare la prima colonna quando si esegue una query su di essa.

In breve:no, non è per spettacolo, ci sono reali vantaggi in termini di prestazioni.