Ett index på tidsstämpelkolumnen och användar-id skulle vara till hjälp. Du måste kunna läsa utdata från ett EXPLAIN-uttalande.
Gå till MySQL och gör följande:
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'
Detta visar dig planen MySQL använder för att köra frågan. Det kommer att finnas en kolumn som heter nyckel. Detta indikerar vilket index MySQL använder i frågan. Jag misstänker att du kommer att se ALLA där vilket betyder att MySQL skannar tabellen från topp till botten och matchar varje rad mot din where-klausul. Skapa nu ett index på kolumnerna tidsstämpel och användarid. Kör EXPLAIN-satsen igen. Du bör se indexet som du skapade i nyckelkolumnen.
Om MySQL använder indexet bör din fråga vara betydligt snabbare. Kom bara ihåg att inte överindexera. Index gör infogning, uppdatering och borttagning långsammare. När du infogar en ny rad i en tabell och det finns tre index på tabellen måste den nya raden skriva 3 värden till de tre olika indexen. Så det är ett tveeggat svärd.