かなりの数のレコードを含むデータベースがあり、ユーザー アイテムが保存されていないユーザーを見つけたいと考えています。
select `name`
from `users`
where `ID` not in (select distinct `userID` from `userItem`)
このクエリは、MySQL サーバーによって切断される前に実行を終了することさえできません。ここには、私が知らない大きな非効率性がありますか?
には 200,000 レコード、userItem
には 14,000 レコードがありusers
ます。
クエリの Explain の結果:
1 PRIMARY users ALL NULL NULL NULL NULL 13369 Using where
2 DEPENDENT SUBQUERY userItem index NULL userID 8 NULL 189861 Using where; Using index; Using temporary