Indexy mohou hrát důležitou roli při optimalizaci dotazů a rychlém vyhledávání výsledků v tabulkách. Nejdůležitějším krokem je tedy vybrat, které sloupce mají být indexovány. Existují dvě hlavní místa, kde můžeme zvážit indexování:sloupce odkazované v klauzuli WHERE a sloupce používané v klauzulích JOIN. Stručně řečeno, měly by být indexovány takové sloupce, podle kterých musíte hledat konkrétní záznamy. Předpokládejme, že máme tabulku s názvem kupující, kde dotaz SELECT používá indexy jako níže:
SELECT
buyer_id /* no need to index */
FROM buyers
WHERE first_name='Tariq' /* consider to use index */
AND last_name='Iqbal' /* consider to use index */
Protože "buyer_id" je odkazováno v části SELECT, MySQL jej nepoužije k omezení vybraných řádků. Proto není potřeba jej indexovat. Níže je uveden další příklad trochu odlišný od výše uvedeného:
SELECT
buyers.buyer_id, /* no need to index */
country.name /* no need to index */
FROM buyers LEFT JOIN country
ON buyers.country_id=country.country_id /* consider to use index */
WHERE
first_name='Tariq' /* consider to use index */
AND
last_name='Iqbal' /* consider to use index */
Podle výše uvedených dotazů first_name, last_name sloupce mohou být indexovány, protože jsou umístěny v klauzuli WHERE. Také další pole, country_id z tabulky zemí, lze zvážit pro indexování, protože je v klauzuli JOIN. Indexování lze tedy zvážit u každého pole v klauzuli WHERE nebo v klauzuli JOIN.
Následující seznam také nabízí několik tipů, které byste měli mít vždy na paměti, když zamýšlíte vytvářet indexy do svých tabulek:
- Indexujte pouze ty sloupce, které jsou vyžadovány v klauzulích WHERE a ORDER BY. Nadměrné indexování sloupců bude mít za následek některé nevýhody.
- Zkuste využít funkce "index prefix" nebo "multi-columns index" MySQL. Pokud vytvoříte index, jako je INDEX(křestní_jméno, příjmení), nevytvářejte INDEX(křestní_jméno). „Prefix indexu“ nebo „index více sloupců“ se však ve všech případech vyhledávání nedoporučuje.
- Pro ty sloupce, ve kterých uvažujete o indexování, použijte atribut NOT NULL, takže hodnoty NULL nebudou nikdy uloženy.
- K protokolování dotazů, které nepoužívají indexy, použijte volbu --log-long-format. Tímto způsobem můžete prozkoumat tento soubor protokolu a podle toho upravit své dotazy.
- Příkaz EXPLAIN vám pomůže odhalit, jak MySQL provede dotaz. Ukazuje, jak a v jakém pořadí jsou tabulky spojeny. To může být velmi užitečné pro určení, jak psát optimalizované dotazy a zda je potřeba sloupce indexovat.
Aktualizace (23. února 15):
Jakýkoli index (dobrý/špatný) prodlužuje dobu vkládání a aktualizace.
V závislosti na vašich indexech (počet indexů a typ) se vyhledá výsledek. Pokud se váš čas vyhledávání zvýší kvůli indexu, pak je to špatný index.
Pravděpodobně v každé knize může mít „Stránka indexu“ úvodní stránku kapitoly, číslo stránky s tématem a také začátek stránky podtéma. Některá vysvětlení na stránce Index pomáhá, ale podrobnější index vás může zmást nebo vyděsit. Indexy mají také paměť.
Výběr indexu by měl být moudrý. Mějte na paměti, že ne všechny sloupce vyžadují index.