Kolomvolgorde had een grote invloed op de prestaties van sommige van de databases die ik heb afgestemd, waaronder Sql Server, Oracle en MySQL. Dit bericht heeft goede vuistregels :
- Primaire sleutelkolommen eerst
- Kolommen met buitenlandse sleutels hierna.
- Veel gezochte kolommen volgende
- Later regelmatig bijgewerkte kolommen
- Nullable kolommen als laatste.
- Minst gebruikte nullable kolommen na vaker gebruikte nullable kolommen
Een voorbeeld van verschil in prestatie is een index-lookup. De database-engine vindt een rij op basis van enkele voorwaarden in de index en krijgt een rijadres terug. Stel nu dat u op zoek bent naar SomeValue en dat het in deze tabel staat:
SomeId int,
SomeString varchar(100),
SomeValue int
De engine moet raden waar SomeValue begint, omdat SomeString een onbekende lengte heeft. Als u de volgorde echter wijzigt in:
SomeId int,
SomeValue int,
SomeString varchar(100)
Nu weet de engine dat SomeValue 4 bytes na het begin van de rij kan worden gevonden. Kolomvolgorde kan dus een aanzienlijke prestatie-impact hebben.
BEWERKEN:Sql Server 2005 slaat velden met een vaste lengte op aan het begin van de rij. En elke rij heeft een verwijzing naar het begin van een varchar. Dit doet het effect dat ik hierboven heb genoemd volledig teniet. Dus voor recente databases heeft de kolomvolgorde geen invloed meer.