Med hensyn til indeksspørgsmålene er et indeks ikke kun ønskeligt, men det er nødvendigt at "fremskynde" tingene. Som jeg forstår det (i "lægmands"-termer), er et indekss funktion at fremskynde søgninger og gendannelser af data inde i en tabel.
Grunde til at bruge indekser:
- Identificer hver række entydigt i hver tabel (den primære nøgle er trods alt et indeks)
- Indekserne er sorteret (selvom dataene ikke er det)
- Fremskynd søgninger og filtre:Et indeks gør gendannelsen af data hurtigere, da det "holder" placeringen af dataene i tabellen (det "pinpointer" de data, du vil gendanne). Det gør også lettere for databasemotoren at filtrere dataene (det er altid hurtigere og nemmere at filtrere sorteret data end forvrænget data)
- Optimer den måde, data gendannes på, når du bruger relaterede tabeller:Hver fremmednøgle skal indekseres for at fremskynde de forespørgsler, der involverer primære - fremmednøglerelationer
Nogle "tommelfingerregler", jeg bruger til at bestemme, hvilke felter der skal indekseres:
- Hver primærnøgle er indekseret (det oplagte). en:en primær nøgle skal være unik og ikke null)
- Hver fremmednøgle skal indekseres (for at gøre relationer mellem primær og fremmed nøgle effektiv)
- Hvert numeriske eller datofelt, som jeg skal udføre søgninger på, skal indekseres. Når det er sagt, prøver jeg at undgå
double
(eller enhver anden numerisk type med flydende komma) felter, der skal indekseres, da de generelt bruges til at gemme værdier, der ikke er beregnet til at blive søgt i. - Hvert
char
ellervarchar
felt, hvor jeg skal udføre søgninger, skal indekseres. Prøv at undgå indekser påtext
felter, da de kan rumme meget store værdier i dem. - Undgå indeksering binær (
blob
) felter... det giver ingen mening - Gør det ikke falde i fristelsen til at indeksere alt. Tag dig tid til at beslutte, hvilke felter skal være indekseret og hvilke felter ikke må blive indekseret.