sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man bestämmer när man använder index på tabellkolumnen

I allmänhet skulle min indexeringsstrategi vara ungefär så här (jag använder endast SQL Server för tillfället - anpassa till ditt eget databassystem efter behov):

  • välj en vara klustringsnyckel - inte en GUID, inte en VARCHAR(250) eller något - ett bra klustringsnyckeln är smal, unik, stabil, ständigt ökande - något som en INT IDENTITY är perfekt. Gör detta till din klustrade primärnyckel -> ger dig ditt första index på tabellen

  • för en kolumn som används som en främmande nyckel till en annan tabell - lägg till ett index. Det kan antingen vara ett enda kolumnindex - eller så kan det vara ett sammansatt index - vad som än fungerar bäst för ditt fall. Det är viktigt att kolumnen för främmande nyckel är den första kolumnen i det indexet (om du använder ett sammansatt index) - annars är fördelarna med JOIN s eller för att kontrollera referensintegriteten kommer inte att vara tillgängliga för ditt system

Och det var allt för nu.

Sedan:kör ditt system - observera och mät - upprätta en baslinje. Är appen tillräckligt snabb? Om ja -> du är klar - gå hem och njut av din fritid.

Om inte:börja då samla in data och indikationer på varför appen inte är tillräckligt snabb. Titta på t.ex. saker som DMV i SQL Server som berättar om de sämst presterande frågorna, eller saknade index DMV . Analysera dem. Se vad du kan förbättra. Lägg till ett index i taget och igen:observera, mät, jämför med din baslinje.

Om du har förbättring -> lämna det indexet på plats och detta mått är din nya baslinje. Skölj och upprepa tills du (och dina användare) är nöjda med appens prestanda (och sedan gå hem och njut av din ledighet).

Överindexering i SQL Server kan vara värre än att inte ha några index. Börja inte med för många index till att börja med! Fastställ bara bra klustrade PK och icke-klustrade index för främmande nyckel - det är allt - observera, mät, optimera och upprepa den cykeln.



  1. SQLite - Säkerhetskopiera en databas till fil

  2. Hur får jag textinnehåll från BLOB i Oracle SQL

  3. JOIN Multiple Table baserat på tidsstämpel och ett annat villkor

  4. PostgreSQL:Släpp databas men DB finns kvar