下記のクエリで
「users
.deleted_at
IS NULL」 が2つあり、重複した条件のため遅くなっているようです。
片方消すと一瞬でクエリが完了します。
重複した条件がWHERE句に存在するとき、どういう風に探し行ってなぜ時間がかかってるのかがわかりません。
どなたかご教示いただけると幸いです。
※ここで対象にするUsersは5万件になります
select count(*) from `users` where `users`.`id` IN( SELECT `tweets`.`tweet_id` FROM `tweets` WHERE `tweets`.`type` = 2 ) AND `users`.`company_id` = 193 AND `users`.`deleted_at` IS NULL AND `users`.`deleted_at` IS NULL ; => 50000
Railsのタグを入れているのは下記が理由です。
Rails5にしてからwhere句の条件が重複した条件でも愚直にクエリに追加されるように見えました。
記事など探しても該当する情報を見つけられなかったので勘違いかも知れませんが、そのような変更があった、などの情報あれば教えて欲しいです。
Mysqlのバージョンも5.6から8.0に上げているのでそのせいもあるのかも知れませんが、、
#Rails 4のとき Users.where(id: 1).where(deleted_at: nil).where(deleted_at: nil).count =>SELECT COUNT(*) FROM `users` WHERE `users`.`id` = 1 AND `users`.`deleted_at` IS NULL #Rails 5のとき Users.where(id: 1).where(deleted_at: nil).where(deleted_at: nil).count =>SELECT COUNT(*) FROM `users` WHERE `users`.`id` = 1 AND `users`.`deleted_at` IS NULL AND `users`.`deleted_at` IS NULL
gem paranoia と scope使ったときなどに条件が重複してしまってクエリが遅くなったりと困っています。
回答2件
あなたの回答
tips
プレビュー