Twój styl jest bardzo rzadki.
Większość ludzi prawdopodobnie napisałaby WHERE began_at < NOW() AND finished_at > NOW()
Jednakże. Zalecam umieszczenie indeksu w obu polach.
Połączony klucz nie będzie dla Ciebie przydatny, ponieważ przyspieszyłby tylko wyszukiwanie określonych kombinacji dat.
Cóż, nie jest to do końca prawdą, ponieważ jeśli użyjesz betree, klucz złożony pomoże ci, ale nie tak dobry, jakbyś indeksował je osobno. Klucze połączone są bardzo dobre, jeśli przeszukujesz kombinacje pól z operatorem równości (=). Indeksy pojedynczego pola działają lepiej w żądaniach ragen.
Możesz trochę wyszukać w Google „wielowymiarowe wyszukiwanie zakresu”.
Powodem jest to, że wszystkie pasujące pola w jednym polu można w zasadzie znaleźć w czasie log(n) w btrees. Więc ogólny czas działania będzie wynosił O(k*log(n)), czyli O(log(n)).
Zapytania zakresu wielowymiarowego mają czas wykonywania O(sqrt(n)), który jest dłuższy. Jednak są też lepsze implementacje, które również nie pozwalają na logarytmiczne działanie. Jednak nie są one w pełni zaimplementowane w mysql, więc będzie gorzej lub okropnie w zależności od wersji.
Więc podsumuję:
-
Porównanie równości na pojedynczych polach:indeks skrótu (runtime O(1))
-
Przeszukiwanie zakresu na pojedynczych polach:indeks btree na pojedynczych polach ( O(log(n)) )
-
Wyszukiwanie równości w wielu polach:połączony klucz skrótu (środowisko uruchomieniowe O(1))
te przypadki są jasne...
- Przeszukiwanie zakresu w wielu polach:oddzielne indeksy btree ( O(log(n)) )
tutaj nie jest to takie jasne. z obecnymi wersjami wyraźnie lepiej jest indeksować osobno z powodów podanych powyżej. Dzięki doskonałej implementacji dla tego przypadku użycia można osiągnąć lepszą wydajność z połączonymi kluczami, ale nie ma wiedzy, który to obsługuje. mysql obsługuje luźne indeksy (co potrzebujesz do tego) od wersji 5.0, ale tylko bardzo ograniczone, a optymalizator zapytań wykorzystuje je tylko w rzadkich przypadkach afaik. nie wiem o nowszych wersjach, takich jak 5.3 lub coś takiego.
jednak z mysql implementującym luźne indeksy, kombinacje kluczy w polach, w których wykonujesz żądania zakresu lub sortujesz w różnych kierunkach, stają się coraz bardziej istotne.