Nie zgadzam się z niektórymi odpowiedziami na to pytanie.
Czy istnieje coś takiego, jak zbyt wiele indeksów?
Oczywiście. Nie twórz indeksów, które nie są używane przez żadne z Twoich zapytań. Nie twórz nadmiarowych indeksów. Użyj narzędzi, takich jak pt-duplicate-key-checker i pt-index-usage, aby pomóc Ci odkryć indeksy, których nie potrzebujesz.
Co przyspieszą indeksy?
- Warunki wyszukiwania w klauzuli WHERE.
- Warunki dołączenia.
- Niektóre przypadki ORDER BY.
- Niektóre przypadki GROUP BY.
- UNIKALNE ograniczenia.
- Ograniczenia klucza obcego.
- Wyszukiwanie FULLTEXT.
Inne odpowiedzi sugerowały, że INSERT / UPDATE / DELETE jest wolniejsze, im więcej masz indeksów. To prawda, ale weź pod uwagę, że wiele zastosowań UPDATE i DELETE ma również klauzule WHERE, aw MySQL, UPDATE i DELETE obsługują również JOIN. Indeksy mogą przynieść tym zapytaniom większe korzyści niż zrekompensować narzut aktualizowania indeksów.
Ponadto InnoDB blokuje wiersze, na które ma wpływ UPDATE lub DELETE. Nazywają to blokowaniem na poziomie wiersza, ale tak naprawdę jest to blokowanie na poziomie indeksu. Jeśli nie ma indeksu do zawężenia wyszukiwania, InnoDB musi zablokować znacznie więcej wierszy niż określony wiersz, który zmieniasz. Może nawet zablokować wszystkie wiersze w tabeli. Te blokady blokują zmiany wprowadzone przez innych klientów, nawet jeśli nie są logicznie sprzeczne.
Kiedy warto dodać indeks?
Jeśli wiesz, że musisz uruchomić zapytanie, które skorzystałoby z indeksu w jednym z powyższych przypadków.
Kiedy dodanie indeksu jest złym pomysłem?
Jeśli indeks jest lewym przedrostkiem innego istniejącego indeksu lub indeks nie pomaga w zadaniu żadnego z zapytań, które musisz uruchomić.
Zalety i Wady wielu indeksów a indeksy wielokolumnowe?
W niektórych przypadkach MySQL może przeprowadzać optymalizację scalania indeksów i sumować lub przecinać wyniki niezależnych wyszukiwań indeksu. Jednak definiowanie pojedynczego indeksu daje lepszą wydajność, więc scalanie indeksów nie musi być wykonywane.
Dla jednego z moich klientów konsultingowych zdefiniowałem indeks wielokolumnowy w tabeli wiele-do-wielu, w której nie było indeksu, i poprawiłem ich zapytanie łączące o 94 miliony!
Projektowanie odpowiednich indeksów jest złożonym procesem opartym na zapytaniach, które należy zoptymalizować . Nie należy tworzyć ogólnych reguł, takich jak „indeksuj wszystko” lub „indeksuj nic, aby uniknąć spowolnienia aktualizacji”.
Zobacz także moją prezentację Jak projektować indeksy, naprawdę .