如何加快以下查询的速度?我希望找到具有6个或更少的fb_id
唯一值的记录。选择似乎并没有增加太多时间,而是group
和count
。有其他查询方式吗?我在fb_id
上添加了索引,它仅使查询速度提高了50%
FbGroupApplication.group(:fb_id).where.not(
fb_id: _get_exclude_fb_group_ids
).group(
"count_fb_id desc"
).count(
"fb_id"
).select{|k, v| v <= 6 }
该查询正在查找具有6个或更少应用程序的FbGroupApplications应用于同一fb_id
答案 0 :(得分:2)
将块传递给select
方法使Rails触发SQL,将找到的行转换为ActiveRecord :: Base的ruby对象(记录),然后根据所给的块在数组上执行选择。这整个过程成本很高(红宝石对此不擅长)。
您可以使用6
子句“委托”将计数vs having
与数据库进行比较的责任:
FbGroupApplication
.group(:fb_id)
.where.not(fb_id: _get_exclude_fb_group_ids)
.having('count(fb_id) <= 6')