タイムスタンプ列とユーザーIDのインデックスが役立ちます。 EXPLAINステートメントの出力を読み取ることができる必要があります。
MySQLに移動し、次の手順を実行します。
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'
これは、MySQLがクエリを実行するために使用するプランを示しています。キーと呼ばれる列があります。これは、MySQLがクエリで使用しているインデックスを示します。そこにALLが表示されると思います。これは、MySQLがテーブルを上から下にスキャンして、すべての行をwhere句と照合していることを意味します。次に、タイムスタンプ列とユーザーID列にインデックスを作成します。 EXPLAINステートメントを再度実行します。キー列に作成したインデックスが表示されます。
MySQLがインデックスを使用する場合、クエリはかなり高速になるはずです。インデックスを付けすぎないように注意してください。インデックスを使用すると、挿入、更新、および削除が遅くなります。テーブルに新しい行を挿入し、テーブルに3つのインデックスがある場合、新しい行は3つの異なるインデックスに3つの値を書き込む必要があります。つまり、両刃の剣です。