Kolonnerækkefølgen havde en stor ydeevnepåvirkning på nogle af de databaser, jeg har tunet, og spænder over SQL Server, Oracle og MySQL. Dette indlæg har gode tommelfingerregler :
- Primære nøglekolonner først
- Fremmednøglekolonner næste.
- Ofte søgte kolonner næste
- Ofte opdaterede kolonner senere
- Nullable kolonner sidst.
- Mindst brugte nullbare kolonner efter hyppigere brugte nullable kolonner
Et eksempel på forskel i ydeevne er et indeksopslag. Databasemotoren finder en række baseret på nogle forhold i indekset og får en rækkeadresse tilbage. Sig nu, at du leder efter SomeValue, og det er i denne tabel:
SomeId int,
SomeString varchar(100),
SomeValue int
Motoren skal gætte, hvor SomeValue starter, fordi SomeString har en ukendt længde. Men hvis du ændrer rækkefølgen til:
SomeId int,
SomeValue int,
SomeString varchar(100)
Nu ved motoren, at SomeValue kan findes 4 bytes efter starten af rækken. Så kolonnerækkefølge kan have en betydelig effekt på ydeevnen.
EDIT:SQL Server 2005 gemmer felter med fast længde i begyndelsen af rækken. Og hver række har en reference til starten af en varchar. Dette negerer fuldstændig den effekt, jeg har nævnt ovenfor. Så for nyere databaser har kolonnerækkefølgen ikke længere nogen indflydelse.