Ne, neindexujete všechny sloupce. Indexujete sloupce, které se konkrétně týkají WHERE
klauzule a někdy, pokud jsou součástí ORDER BY
.
V tomto případě byste chtěli index na type
:
SELECT name FROM users WHERE type='admin'
V tomto případě byste chtěli index na active,type
:
SELECT name FROM users WHERE type='admin' AND active=1
V tomto případě můžete chtít index na active,type,name
:
SELECT name FROM users WHERE type-='admin' AND active=1 ORDER BY name LIMIT 10
Čím více indexů přidáte, tím pomalejší bude zápis, ale rychlejší čtení. Jedná se o klasický kompromis. Pečlivě vyhodnoťte, jaké indexy potřebujete, a použijte je pouze v případě, že z toho bude hmatatelný přínos. Neplácejte je jen proto, že máte pocit, že by tam měli být.
Na velmi malých tabulkách, které mají <1000 řádků, indexy tolik nepomohou, protože skenování tabulky nebude trvat tak dlouho. V čemkoli netriviálním jsou naprosto nezbytné.
Pokud máte problémy s výkonem, navrhoval bych, aby největší překážkou bylo vaše schéma, nikoli nedostatek indexů.