Generelt vil min indekseringsstrategi være noget som denne (jeg bruger udelukkende SQL Server indtil videre - tilpas dit eget databasesystem efter behov):
-
vælg en vare klyngenøgle - ikke en GUID, ikke en
VARCHAR(250)
eller noget - en god klyngenøgle er smal, unik, stabil, stadigt stigende - noget som enINT IDENTITY
er perfekt. Gør dette til din klyngede primærnøgle -> giver dig dit første indeks på bordet -
for enhver kolonne, der bliver brugt som en fremmednøgle til en anden tabel - tilføj et indeks. Det kan enten være et enkelt kolonneindeks - eller det kan være et sammensat indeks - hvad der passer bedst til din sag. Det er vigtigt, at kolonnen med fremmednøgle er den første kolonne i det indeks (hvis du bruger et sammensat indeks) - ellers er fordelene ved
JOIN
's eller til kontrol af referenceintegritet vil ikke være tilgængelig for dit system
Og det er det for nu.
Derefter:Kør dit system - observer og mål - opret en baseline. Er appen hurtig nok? Hvis ja -> er du færdig - gå hjem og nyd din fritid.
Hvis ikke:så begynd at indsamle data og indikationer på, hvorfor appen ikke er hurtig nok. Se på f.eks. ting som DMV'erne i SQL Server, der fortæller dig om de dårligst ydende forespørgsler, eller den manglende indeks DMV . Analyser dem. Se, hvad du kan forbedre. Tilføj et indeks ad gangen og igen:observer, mål, sammenlign med din baseline.
Hvis du har forbedring -> lad det indeks være på plads, og denne måling er din nye baseline. Skyl og gentag, indtil du (og dine brugere) er tilfredse med appens ydeevne (og så gå hjem og nyd din fridag).
Overindeksering i SQL Server kan være værre end ikke at have nogen indekser. Start ikke med for mange indeks til at begynde med! Opret kun godt klyngede PK og udenlandsk nøgle, ikke-klyngede indekser - det er alt - så observer, mål, optimer og gentag denne cyklus.