Cóż, przydałby się indeks w kolumnie sygnatury czasowej i identyfikatorze użytkownika. Musisz być w stanie odczytać wynik instrukcji EXPLAIN.
Przejdź do MySQL i wykonaj następujące czynności:
EXPLAIN SELECT timestamp, username, [a few more] FROM log
WHERE timestamp BETWEEN '2012-03-30 08:00:00' AND '2012-03-30 16:00:00'
AND username='XX'
To pokazuje plan, którego MySQL używa do wykonania zapytania. Pojawi się kolumna o nazwie klucz. Wskazuje to, jakiego indeksu MySQL używa w zapytaniu. Podejrzewam, że zobaczysz tam WSZYSTKO, co oznacza, że MySQL skanuje tabelę od góry do dołu, dopasowując każdy wiersz do klauzuli where. Teraz utwórz indeks w kolumnach sygnatury czasowej i identyfikatora użytkownika. Uruchom ponownie instrukcję EXPLAIN. Powinieneś zobaczyć utworzony indeks w kolumnie klucza.
Jeśli MySQL używa indeksu, Twoje zapytanie powinno być znacznie szybsze. Pamiętaj tylko, aby nie przesadzać. Indeksy spowalniają wstawianie, aktualizowanie i usuwanie. Kiedy wstawiasz nowy wiersz do tabeli, a w tabeli znajdują się trzy indeksy, nowy wiersz musi zapisać 3 wartości do trzech różnych indeksów. Więc jest to miecz obosieczny.