Obecným pravidlem pro indexy je přihodit jednu na jakékoli pole použité v WHERE
nebo JOIN
doložka.
Jak již bylo řečeno, existuje několik optimalizací, které můžete provést. Pokud VÍTE že určitá kombinace polí je jediná, která bude kdy použita ve WHERE na konkrétní tabulce, pak můžete vytvořit jeden klíč s více poli pouze pro tato pole, např.
INDEX (field1, field2, field5)
v.s.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Vícepolový index může být v mnoha případech efektivnější, oproti nutnosti skenovat více indexů. Nevýhodou je, že index s více poli je použitelný pouze v případě, že jsou daná pole skutečně použita v klauzuli WHERE.
S vašimi ukázkovými dotazy od element
a field_id
jsou ve všech třech indexech, možná by bylo lepší je rozdělit do jejich vlastního vyhrazeného indexu. Pokud se jedná o měnitelná pole, je lepší ponechat jim vlastní vyhrazený index. např. pokud někdy budete muset změnit field_id
hromadně musí DB aktualizovat 3 různé indexy, v.s. aktualizace pouze jednoho vyhrazeného.
Vše se ale týká srovnávání – otestujte své konkrétní nastavení pomocí různých nastavení indexů a zjistěte, které funguje nejlépe. Základní pravidla jsou užitečná, ale nefungují 100% času.