Nie, nie indeksujesz wszystkich kolumn. Indeksujesz kolumny, które są konkretnie zaangażowane w WHERE
klauzuli, a czasami, jeśli biorą udział w ORDER BY
.
W takim przypadku potrzebujesz indeksu na type
:
SELECT name FROM users WHERE type='admin'
W tym przypadku potrzebujesz indeksu na active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
W takim przypadku możesz potrzebować indeksu na active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Im więcej indeksów dodasz, tym wolniejsze będą zapisy, ale szybsze będą odczyty. To klasyczny kompromis. Oceń dokładnie, jakich indeksów potrzebujesz i stosuj je tylko wtedy, gdy przyniesie to wymierne korzyści. Nie uderzaj ich tylko dlatego, że czujesz, że powinny tam być.
W przypadku bardzo małych tabel, tych z <1000 wierszami, indeksy nie pomogą tak bardzo, ponieważ skanowanie tabeli nie zajmie tak dużo czasu. W przypadku wszystkiego, co niebanalne, są one absolutnie niezbędne.
Jeśli masz problemy z wydajnością, sugeruję, że największą przeszkodą jest Twój schemat, a nie brak indeksów.