私のmysqlデータベースには、数十万行のテーブルがあります。各行には、(他のデータの中でも)ユーザー名とタイムスタンプがあります。
特定のユーザーの最新のタイムスタンプを持つレコードを取得する必要があります。
現在のブルートフォースクエリは次のとおりです。
SELECT * FROM tableName WHERE `user_name`="The user name" AND datetime_sent = (SELECT MAX(`datetime_sent`) FROM tableName WHERE `user_name`="The user name");
user_name
テーブルには、オンとオンのインデックスがありdatetime_sent
ます。
このクエリを改善するにはどうすればよいですか?一度に何千ものこれらのクエリを実行する必要があります。各クエリには1〜4ミリ秒かかるようで、同じ結果を得るにははるかに効率的な方法があると思います。