Ogólna zasada dotycząca indeksów to umieszczanie jednego na dowolnym polu używanym w WHERE
lub JOIN
klauzula.
Biorąc to pod uwagę, istnieje kilka optymalizacji, które możesz zrobić. Jeśli WIESZ że pewna kombinacja pól jest jedyną, która będzie kiedykolwiek używana w WHERE w danej tabeli, możesz utworzyć pojedynczy klucz wielopolowy tylko dla tych pól, np.
INDEX (field1, field2, field5)
vs.
INDEX (field1),
INDEX (field2),
INDEX (field5)
Indeks wielopolowy może być w wielu przypadkach bardziej wydajny niż konieczność skanowania wielu indeksów. Minusem jest to, że indeks wielopolowy jest użyteczny tylko wtedy, gdy dane pola są faktycznie używane w klauzuli WHERE.
Z przykładowymi zapytaniami, ponieważ element
i field_id
znajdują się we wszystkich trzech indeksach, lepiej byłoby podzielić je na ich własny dedykowany indeks. Jeśli są to zmienne pola, lepiej zachować dla nich własny, dedykowany indeks. np. jeśli kiedykolwiek będziesz musiał zmienić field_id
zbiorczo, DB musi zaktualizować 3 różne indeksy, vs. aktualizowanie tylko jednego dedykowanego.
Ale wszystko sprowadza się do testów porównawczych – przetestuj swoją konkretną konfigurację z różnymi ustawieniami indeksów i zobacz, która działa najlepiej. Zasady kciuka są przydatne, ale nie działają w 100% przypadków.