sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server – När ska man använda Clustered vs non-Clustered Index?

Jag vill bara lägga in ett varningsord:snälla mycket försiktigt välj ditt klustrade index! Varje "vanlig" datatabell borde ha ett klustrat index, eftersom ett klustrat index verkligen påskyndar en hel del operationer - ja, påskyndar , även infogar och raderar! Men bara om du väljer en vara klustrade index.

Det är den mest replikerade datastruktur i din SQL Server-databas. Klustringsnyckeln kommer också att vara en del av varje icke-klustrade index på ditt bord.

Du bör vara extremt försiktig när du väljer en klustringsnyckel - det bör vara:

  • smal (4 byte idealiskt)

  • unikt (det är trots allt "radpekaren". Om du inte gör den unik kommer SQL Server att göra det åt dig i bakgrunden, vilket kostar dig ett par byte för varje post gånger antalet rader och antalet icke-klustrade index du har - detta kan bli mycket kostsamt!)

  • statisk (byt aldrig - om möjligt)

  • helst ständigt ökande så att du inte kommer att sluta med hemsk indexfragmentering (en GUID är den totala motsatsen till en bra klustringsnyckel - av just den anledningen)

  • den ska vara icke-nullbar och helst även fast bredd - en varchar(250) gör en mycket dålig klustringsnyckel

Allt annat borde verkligen vara andra och tredje nivå av betydelse bakom dessa punkter ....

Se några av Kimberly Tripps (The Queen of Indexing ) blogginlägg om ämnet - allt hon har skrivit i sin blogg är helt ovärderligt - läs det, smält det - lev efter det!




  1. Identifiera django främmande nyckellänkar programmerat

  2. Vad är det mest effektiva sättet att normalisera text från kolumn till en tabell?

  3. Rails:Postgres tillstånd nekad att skapa databas på rake db:create:all

  4. Indexering för nyckeluppsättningspaginering i mysql