Musisz zrozumieć, że MySQL (w przypadku InnoDB) używa tylko skrajnego lewego przedrostka twoich indeksów. Jeśli więc indeks znajduje się w Field1 + Field2, zapytanie z tylko Field2 w GDZIE nie może wykorzystać całego indeksu.
A jeśli Field1 + Field2 + Field3
jest indeksem, zapytaniem zawierającym tylko Field1 & Field3
w GDZIE to samo by się stało.
Opcja 1
Jeśli chcesz zoptymalizować każde wyszukiwanie, musisz utworzyć osobny indeks dla każdego scenariusza wyszukiwania. Jeśli jednak tabele są duże, indeksy również staną się bardzo duże. Jeśli te zapytania są wykonywane bardzo często, byłoby to tego warte.
Opcja 2
Możesz użyć sprytnej sztuczki, jeśli Twoje wyszukiwania mają niską selektywność (tj. Płeć), umieszczając kolumny o niskiej selektywności najbardziej z lewej strony i użyj Gender IN(M, F)
umieścić go w GDZIE klauzulę wraz z innymi kolumnami, aby wykorzystać cały indeks.