我使用ActiveRecord和MySQL进行以下设置:
用户通过成员身份拥有多个组通过成员身份,
组拥有许多用户
schema.rb中还描述了group_id和user_id的索引:
add_index "memberships", ["group_id", "user_id"], name: "uugj_index", using: :btree
Run Code Online (Sandbox Code Playgroud)
User.where(id: Membership.uniq.pluck(:user_id))`
Run Code Online (Sandbox Code Playgroud)
(3.8ms)SELECT DISTINCT
memberships.user_idFROMmembershipsUser Load(11.0ms)SELECTusers.*FROMusersWHEREusers.idIN(1,2 ......)
User.where(id: Membership.uniq.select(:user_id))
Run Code Online (Sandbox Code Playgroud)
用户加载(15.2ms)SELECT
users.*FROMusersWHEREusers.idIN(SELECT DISTINCTmemberships.user_idFROMmemberships)
User.uniq.joins(:memberships)
Run Code Online (Sandbox Code Playgroud)
用户负载(135.1ms)SELECT DISTINCT
users.*FROMusersINNER JOINmembershipsONmemberships.user_id=users.id
这样做的最佳方法是什么?为什么带连接的查询要慢得多?
mysql activerecord ruby-on-rails database-performance ruby-on-rails-4