sql >> Databasteknik >  >> RDS >> Mysql

Finns det någon anledning att oroa sig för kolumnordningen i en tabell?

Kolumnordning hade en stor prestandapåverkan på några av de databaser jag har trimmat, som spänner över SQL Server, Oracle och MySQL. Det här inlägget har bra tumregler :

  • Primära nyckelkolumner först
  • Kolumner för främmande nyckel.
  • Vanligt sökta kolumner nästa
  • Ofta uppdaterade kolumner senare
  • Nullbara kolumner sist.
  • Minst använda null-kolumner efter mer frekvent använda null-kolumner

Ett exempel på skillnad i prestanda är en indexuppslagning. Databasmotorn hittar en rad baserat på vissa villkor i indexet och får tillbaka en radadress. Säg nu att du letar efter SomeValue, och det finns i den här tabellen:

 SomeId int,
 SomeString varchar(100),
 SomeValue int

Motorn måste gissa var SomeValue startar, eftersom SomeString har en okänd längd. Men om du ändrar ordningen till:

 SomeId int,
 SomeValue int,
 SomeString varchar(100)

Nu vet motorn att SomeValue kan hittas 4 byte efter starten av raden. Så kolumnordning kan ha en betydande inverkan på prestanda.

EDIT:SQL Server 2005 lagrar fält med fast längd i början av raden. Och varje rad har en referens till början av en varchar. Detta förnekar helt effekten jag har listat ovan. Så för de senaste databaserna har kolumnordningen inte längre någon inverkan.



  1. Minimera effekten av att bredda en IDENTITY-kolumn – del 2

  2. Skapa en länkad server mellan två Docker-behållare som kör SQL Server (T-SQL-exempel)

  3. Hur man inaktiverar kontroll av främmande nyckel i MySQL

  4. SQL Server rekursiv självanslutning