Kolejność kolumn miała duży wpływ na wydajność niektórych dostrojonych przeze mnie baz danych, obejmujących Sql Server, Oracle i MySQL. Ten post ma dobre zasady :
- Najpierw kolumny klucza głównego
- Następne kolumny kluczy obcych.
- Następnie często wyszukiwane kolumny
- Często aktualizowane kolumny później
- Kolumny dopuszczające wartość null są ostatnie.
- Najmniej używane kolumny dopuszczające wartość null po częściej używanych kolumnach dopuszczających wartość null
Przykładem różnicy w wydajności jest wyszukiwanie indeksu. Aparat bazy danych znajduje wiersz na podstawie pewnych warunków w indeksie i zwraca adres wiersza. Teraz powiedz, że szukasz SomeValue i jest to w tej tabeli:
SomeId int,
SomeString varchar(100),
SomeValue int
Silnik musi odgadnąć, gdzie zaczyna się SomeValue, ponieważ SomeString ma nieznaną długość. Jeśli jednak zmienisz kolejność na:
SomeId int,
SomeValue int,
SomeString varchar(100)
Teraz silnik wie, że SomeValue można znaleźć 4 bajty po rozpoczęciu wiersza. Tak więc kolejność kolumn może mieć znaczny wpływ na wydajność.
EDYCJA:Sql Server 2005 przechowuje pola o stałej długości na początku wiersza. A każdy wiersz ma odniesienie do początku varchar. To całkowicie neguje efekt, który wymieniłem powyżej. Tak więc w przypadku najnowszych baz danych kolejność kolumn nie ma już żadnego wpływu.