Eh bien, un index sur la colonne d'horodatage et l'ID utilisateur serait utile. Vous devez être capable de lire la sortie d'une instruction EXPLAIN.
Accédez à MySQL et procédez comme suit :
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'
Cela vous montre le plan utilisé par MySQL pour exécuter la requête. Il y aura une colonne appelée clé. Cela indique quel index MySQL utilise dans la requête. Je suppose que vous y verrez ALL, ce qui signifie que MySQL analyse la table de haut en bas en faisant correspondre chaque ligne à votre clause where. Créez maintenant un index sur les colonnes timestamp et userid. Exécutez à nouveau l'instruction EXPLAIN. Vous devriez voir l'index que vous avez créé dans la colonne clé.
Si MySQL utilise l'index, votre requête devrait être considérablement plus rapide. N'oubliez pas de ne pas surindexer. Les index ralentissent les insertions, les mises à jour et les suppressions. Lorsque vous insérez une nouvelle ligne dans une table et qu'il y a trois index sur la table, la nouvelle ligne doit écrire 3 valeurs dans les trois index différents. C'est donc une épée à double tranchant.