Enumerable#select
を使用して作成したこのクエリがあります。その目的は、レコードにhas many
のレコードがないレコードを見つけることです。レコードがある場合は、preview
属性をtrueに設定したレコードだけを選択します。以下のコードは、そのユースケースに対して完全に機能します。ただし、このクエリは拡張されません。何千ものレコードに対してテストすると、完了するまでに数百秒かかります。どのようにしてこのクエリを改善できますか?最適化には多くのレコード関連クエリがあります
# User has many enrollments
# Enrollment belongs to user.
users_with_no_courses = User.includes(:enrollments).select {|user| user.enrollments.empty? || user.enrollments.where(preview: false).empty?}
素晴らしい。詳細な答えをありがとう! – jason328