Nej, du indexerar inte alla kolumner. Du indexerar kolumner som är specifikt involverade i en WHERE
och ibland om de är inblandade i en ORDER BY
.
I det här fallet vill du ha ett index på type
:
SELECT name FROM users WHERE type='admin'
I det här fallet vill du ha ett index på active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
I det här fallet kanske du vill ha ett index på active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Ju fler index du lägger till desto långsammare blir skrivningarna men desto snabbare blir läsningarna. Detta är en klassisk avvägning. Utvärdera noggrant vilka index du behöver och använd dem endast om det kommer att finnas en påtaglig fördel. Slå inte bara på dem för att du känner att de borde finnas där.
På supersmå tabeller, de med <1000 rader, kommer index inte att hjälpa så mycket eftersom en tabellskanning inte tar så lång tid. På allt som inte är trivialt är de absolut nödvändiga.
Om du har prestandaproblem skulle jag föreslå att ditt schema är det största hindret, inte bristen på index.