Tylko sugestia, jeśli chodzi o indeksy daty i godziny w msql, jest taka, że ślad indeksu wpływa na czas wyszukiwania (tak, wydaje się to oczywiste ... ale czytaj dalej).
Znaczenie tego przy indeksowaniu w dacie/godzinie mówi na przykład '2015-06-05 22:47:20.102' indeks musi uwzględniać każde miejsce w tym czasie. Staje się to bardzo duże przestrzennie i nieporęczne. Skutecznym podejściem, które wykorzystałem, jest utworzenie nowej kolumny datetime i wypełnienie danych przez zaokrąglenie godziny do godziny, a następnie zbudowanie indeksu na tej nowej kolumnie. Przykład „2015-06-05 22:47:20.102” przekłada się na „2015-06-05 22:00:00.000”. Stosując takie podejście, pozostawiamy szczegółowe dane w spokoju i możemy je wyświetlić lub użyć, przeszukując tę nową kolumnę, która daje nam około 10x (przynajmniej) zwrot z szybkości zwracania wyników. Wynika to z faktu, że indeks nie musi uwzględniać pól minut, sekund i milisekund.