Welnu, een index op de tijdstempelkolom en userid zou nuttig zijn. U moet de uitvoer van een EXPLAIN-instructie kunnen lezen.
Ga naar MySQL en doe het volgende:
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'
Dit toont u het plan dat MySQL gebruikt om de query uit te voeren. Er zal een kolom zijn met de naam sleutel. Dit geeft aan welke index MySQL in de query gebruikt. Ik vermoed dat je ALLES daar zult zien, wat betekent dat MySQL de tabel van boven naar beneden scant, waarbij elke rij overeenkomt met je waar-clausule. Maak nu een index op de timestamp- en userid-kolommen. Voer de instructie EXPLAIN opnieuw uit. U zou de index moeten zien die u heeft gemaakt in de sleutelkolom.
Als MySQL de index gebruikt, zou uw query aanzienlijk sneller moeten zijn. Vergeet niet om niet te veel te indexeren. Indexen maken invoegingen, updates en verwijderingen langzamer. Wanneer u een nieuwe rij in een tabel invoegt en er zijn drie indexen in de tabel, moet de nieuwe rij 3 waarden naar de drie verschillende indexen schrijven. Het is dus een tweesnijdend zwaard.