Mysql
 sql >> Database >  >> RDS >> Mysql

C'è qualche motivo per preoccuparsi dell'ordine delle colonne in una tabella?

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.