Не, не индексирате всички колони. Индексирате колони, които са специално включени в WHERE
клауза, а понякога и ако са включени в ORDER BY
.
В този случай бихте искали индекс за type
:
SELECT name FROM users WHERE type='admin'
В този случай бихте искали индекс на active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
В този случай може да искате индекс на active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Колкото повече индекси добавите, толкова по-бавно ще бъде записването, но толкова по-бързо ще бъде четенето. Това е класически компромис. Преценете внимателно какви индекси имате нужда и ги прилагайте само ако има осезаема полза. Не просто ги шамарете, защото чувствате, че трябва да са там.
На супер малки таблици, тези с <1000 реда, индексите няма да помогнат много, защото сканирането на таблицата няма да отнеме толкова време. За всичко нетривиално те са абсолютно необходими.
Ако имате проблеми с производителността, бих предложил вашата схема да е най-голямата пречка, а не липсата на индекси.