Nej, du indekserer ikke alle kolonner. Du indekserer kolonner, der specifikt er involveret i en WHERE
klausul, og nogle gange hvis de er involveret i en ORDER BY
.
I dette tilfælde vil du have et indeks på type
:
SELECT name FROM users WHERE type='admin'
I dette tilfælde vil du have et indeks på active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
I dette tilfælde vil du måske have et indeks på active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Jo flere indekser du tilføjer, jo langsommere vil skrivningen være, men jo hurtigere vil læsningen være. Dette er en klassisk afvejning. Vurder omhyggeligt, hvilke indekser du har brug for, og anvend dem kun, hvis der vil være en håndgribelig fordel. Du skal ikke bare smække dem på, fordi du føler, at de burde være der.
På supersmå tabeller, dem med <1000 rækker, vil indekser ikke hjælpe så meget, fordi en tabelscanning ikke vil tage så lang tid. På alt ikke-trivielt er de absolut nødvendige.
Hvis du har problemer med ydeevnen, vil jeg foreslå, at dit skema er den største hindring, ikke manglen på indekser.