Indeksy mogą odgrywać ważną rolę w optymalizacji zapytań i szybkim wyszukiwaniu wyników w tabelach. Dlatego najważniejszym krokiem jest wybranie kolumn do indeksowania. Istnieją dwa główne miejsca, w których możemy rozważyć indeksowanie: kolumny, do których odwołuje się klauzula WHERE i kolumny używane w klauzulach JOIN. Krótko mówiąc, takie kolumny powinny być indeksowane, według których musisz przeszukiwać określone rekordy. Załóżmy, że mamy tabelę o nazwie buyers, w której zapytanie SELECT używa indeksów takich jak poniżej:
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 */
Ponieważ w części SELECT występuje odniesienie do „Buyer_id”, MySQL nie użyje go do ograniczenia wybranych wierszy. Dlatego nie ma wielkiej potrzeby indeksowania. Poniżej znajduje się kolejny przykład nieco różniący się od powyższego:
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 */
Zgodnie z powyższymi zapytaniami first_name kolumny last_name mogą być indeksowane, ponieważ znajdują się w klauzuli WHERE. Można również wziąć pod uwagę dodatkowe pole country_id z tabeli krajów, ponieważ znajduje się ono w klauzuli JOIN. Zatem indeksowanie można rozpatrywać w każdym polu w klauzuli WHERE lub w klauzuli JOIN.
Poniższa lista zawiera również kilka wskazówek, o których należy zawsze pamiętać podczas tworzenia indeksów w tabelach:
- Indeksuj tylko te kolumny, które są wymagane w klauzulach WHERE i ORDER BY. Indeksowanie kolumn w dużej liczbie spowoduje pewne wady.
- Spróbuj skorzystać z funkcji MySQL „przedrostek indeksu” lub „indeks wielu kolumn”. Jeśli tworzysz indeks, taki jak INDEX (imię, nazwisko), nie twórz INDEKSU (imię). Jednak „przedrostek indeksu” lub „indeks z wieloma kolumnami” nie są zalecane we wszystkich przypadkach wyszukiwania.
- Użyj atrybutu NOT NULL dla tych kolumn, w których rozważasz indeksowanie, aby wartości NULL nigdy nie były przechowywane.
- Użyj opcji --log-long-format, aby rejestrować zapytania, które nie używają indeksów. W ten sposób możesz sprawdzić ten plik dziennika i odpowiednio dostosować swoje zapytania.
- Instrukcja EXPLAIN pomaga ujawnić, w jaki sposób MySQL wykona zapytanie. Pokazuje, jak iw jakiej kolejności są łączone tabele. Może to być bardzo przydatne do określania, jak pisać zoptymalizowane zapytania i czy kolumny mają być indeksowane.
Aktualizacja (23 lutego 2015):
Każdy indeks (dobry / zły) wydłuża czas wstawiania i aktualizacji.
W zależności od posiadanych indeksów (liczby indeksów i typu) wyszukiwany jest wynik. Jeśli czas wyszukiwania wydłuży się z powodu indeksu, to jest to zły indeks.
Prawdopodobnie w każdej książce „Strona indeksu” może mieć stronę początkową rozdziału, początek numeru strony tematu, a także początek strony tematu podrzędnego. Pewne wyjaśnienia na stronie indeksu mogą pomóc, ale bardziej szczegółowy indeks może cię zmylić lub przestraszyć. Indeksy również mają pamięć.
Wybór indeksu powinien być mądry. Pamiętaj, że nie wszystkie kolumny wymagają indeksu.