Bene, un indice sulla colonna timestamp e userid sarebbe utile. Devi essere in grado di leggere l'output di un'istruzione EXPLAIN.
Vai su MySQL e procedi come segue:
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'
Questo mostra il piano utilizzato da MySQL per eseguire la query. Ci sarà una colonna chiamata chiave. Questo indica quale indice sta usando MySQL nella query. Sospetto che vedrai TUTTO lì, il che significa che MySQL sta scansionando la tabella dall'alto verso il basso abbinando ogni riga alla tua clausola where. Ora crea un indice sulle colonne timestamp e userid. Eseguire nuovamente l'istruzione EXPLAIN. Dovresti vedere l'indice che hai creato nella colonna chiave.
Se MySQL utilizza l'indice, la query dovrebbe essere notevolmente più veloce. Ricorda solo di non indicizzare. Gli indici rallentano gli inserimenti, gli aggiornamenti e le eliminazioni. Quando inserisci una nuova riga in una tabella e nella tabella sono presenti tre indici, la nuova riga deve scrivere 3 valori nei tre diversi indici. Quindi è un'arma a doppio taglio.