【发布时间】:2017-07-27 17:45:31
【问题描述】:
我有这样的声明:
select qulified_name
from table
inner join references_table on references_table.id = table.ref_id
where references_table.type = 'x' and table.value in (... +110 000 ids)
这非常慢。 (网络应用程序崩溃并且没有得到结果。 我在 rom-rb 的帮助下创建了我的声明,这使用了续集。但这是我看到声明时得到的声明。
如果我像这样重写语句,与第一个版本相比,性能真的很好:
select qulified_name
from table
inner join (select unnest(array['#{references_id.join("','")}']) id ) as tmp on tmp.id = businesspartner_references.value
inner join references_table on references_table.id = table.ref_id
where references_table.type = 'x'
这样我可以在大约 3 秒内得到结果。
有人可以向我解释为什么会这样吗?没看懂。。
【问题讨论】:
-
尝试同时运行
explain- 我猜连接到临时表比扫描 in 子句要快很多 -
您使用的是哪个版本的 rom-rb?
-
@solnic rom3.1.0, rom-repository 1.2.0 和 rom-sql 1.1.1 但是 karthik 的回答对我来说已经足够解释了。谢谢!
-
我会在 rom-sql 2.0 (FWIW) 中优化这种类型的查询
标签: sql ruby postgresql sequel rom-rb