ActiveRecord加快了where.not查询

时间:2019-05-08 16:00:59

标签: sql postgresql activerecord

我有一个查询,当向查询中添加not子句时,查询速度会大大降低。

# query is 13.6ms
FbGroupApplication.select(
:fb_id
).group(:fb_id
).having('count(fb_id) <= 6'
)


# 3,468ms with `where.not` clause. the array is large (5-10k)
FbGroupApplication.where.not(
fb_id: ids
).select(:fb_id
).group(:fb_id
).having('count(fb_id) <= 6'
)

我在fb_id上添加了索引。但是,要注意的一件事是它是一个文本字段,其值约为12个数字的字符串

如何加快查询速度?

1 个答案:

答案 0 :(得分:0)

假设ID是可变的,并且由于ID数量众多,我猜您最好的方法是创建一个临时表并在其中插入要排除的ID。

然后使用LEFT JOIN查询,选择临时表上不存在的ID,然后删除该表