Nun, ein Index für die Zeitstempelspalte und die Benutzer-ID wäre hilfreich. Sie müssen in der Lage sein, die Ausgabe einer EXPLAIN-Anweisung zu lesen.
Gehen Sie zu MySQL und gehen Sie wie folgt vor:
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'
Dies zeigt Ihnen den Plan, den MySQL verwendet, um die Abfrage auszuführen. Es wird eine Spalte namens Schlüssel geben. Dies gibt an, welchen Index MySQL in der Abfrage verwendet. Ich vermute, Sie werden dort ALL sehen, was bedeutet, dass MySQL die Tabelle von oben nach unten durchsucht und jede Zeile mit Ihrer where-Klausel abgleicht. Erstellen Sie nun einen Index für die Spalten timestamp und userid. Führen Sie die EXPLAIN-Anweisung erneut aus. Sie sollten den von Ihnen erstellten Index in der Schlüsselspalte sehen.
Wenn MySQL den Index verwendet, sollte Ihre Abfrage erheblich schneller sein. Denken Sie nur daran, nicht zu überindexieren. Indizes machen Einfügungen, Aktualisierungen und Löschungen langsamer. Wenn Sie eine neue Zeile in eine Tabelle einfügen und es drei Indizes in der Tabelle gibt, muss die neue Zeile 3 Werte in die drei verschiedenen Indizes schreiben. Es ist also ein zweischneidiges Schwert.