良い一日、私は私がたくさん苦労している質問があります、誰かがこれに対する賢い解決策をすでに見つけたことを願っています(私はMySQLを使用しています)。
私はこのようなテーブルを持っています:
Table `log`
----------
id
inserted
message
user_id
私の目標は、ユーザーの最後に挿入されたレコードを選択し、これを高速化することです。ログテーブルは巨大(約90万レコード)なので、最初のアプローチは次のとおりです。
SELECT * FROM `log`
LEFT JOIN `users` ON `users`.`id` = `log`.`user_id`
WHERE `id` IN
(
SELECT MAX(`id`) FROM `log` GROUP BY `user_id`
)
しかし、すべての行のサブクエリを計算しているようです(EXPLAINはDEPENDENT QUERYを示しています)。このクエリを2つに分割すると、次のようになります。
SELECT MAX(`id`) FROM `log` GROUP BY `user_id`
と
SELECT * FROM `log`
LEFT JOIN `users` ON `users`.`id` = `log`.`user_id`
WHERE `id` IN (....ids from first query...)
実行してもかまいません。これは1つのクエリで達成できますか?