我有一个称为成员资格的类。可能会有多个带有相同电子邮件的记录。要通过电子邮件检索所有会员记录,我正在通过电子邮件创建索引并执行:
Membership.where(email: "example@example.com")
上述操作有多贵?是否有更有效的方法?
谢谢!
我认为最有效的方法是这样的组查询:
Membership.select(:email).group(:email).having("count(*) > 1")
这将产生以下查询
SELECT "memberships"."email" FROM "memberships" GROUP BY "memberships"."email" HAVING (count(*) > 1)
应该在PG和MySQL上使用。
希望它有帮助
编辑
如果您想查看重复项,则可以执行此操作(最后一个计数)
Membership.select(:email).group(:email).having("count(*) > 1").count
这将为每张电子邮件和这样列出的重复数量提供一个集合:
{'some@duplicate.com'=> 2,...等}