L'ordine delle colonne ha avuto un grande impatto sulle prestazioni su alcuni dei database che ho ottimizzato, compresi Sql Server, Oracle e MySQL. Questo post contiene buone regole pratiche :
- Prima le colonne chiave primaria
- Segue la colonna chiave straniera.
- Colonne ricercate di frequente dopo
- Colonne aggiornate di frequente in seguito
- Ultime colonne annullabili.
- Colonne nullable utilizzate meno dopo colonne nullable utilizzate più frequentemente
Un esempio di differenza nelle prestazioni è una ricerca nell'indice. Il motore di database trova una riga in base ad alcune condizioni nell'indice e recupera un indirizzo di riga. Ora supponiamo che stai cercando SomeValue, ed è in questa tabella:
SomeId int,
SomeString varchar(100),
SomeValue int
Il motore deve indovinare dove inizia SomeValue, perché SomeString ha una lunghezza sconosciuta. Tuttavia, se modifichi l'ordine in:
SomeId int,
SomeValue int,
SomeString varchar(100)
Ora il motore sa che SomeValue può essere trovato 4 byte dopo l'inizio della riga. Quindi l'ordine delle colonne può avere un notevole impatto sulle prestazioni.
EDIT:Sql Server 2005 memorizza i campi di lunghezza fissa all'inizio della riga. E ogni riga ha un riferimento all'inizio di un varchar. Questo annulla completamente l'effetto che ho elencato sopra. Quindi, per i database recenti, l'ordine delle colonne non ha più alcun impatto.