ruby-on-rails - 事件记录查询不加载所有 id

标签 ruby-on-rails postgresql ruby-on-rails-3 activerecord

我有一个像这样的事件记录查询:

House.where.not(id: Person.ill.pluck(:house_id))

当我对此查询运行 explain 时,我看到所有 id 都已加载到查询中:

Seq Scan on houses  (cost=0.00..4274.07 rows=1102 width=77)
 Filter: id <> ALL ('{1117,487,842,126,127,459,458,515,332,55,54,10,1697,449,448,1555,13,510,1986,8,9,7,6,5,1865,519,157,513,512,56,103,28,27,97,25,23,385,138,278,92,1,435,196,195,61,363,229,230,238,237,231,160,158,749,748,518,517,174,173,172,395,153,1170,207,206,276,199,198, ....

是否有更高效的方法来实现相同的查询?不加载所有 ID?

最佳答案

pluck 立即运行其查询,因为它返回一个 ID 数组。

您可以使用 select 将结果保存为关系,然后将其用作子查询:

House.where.not(id: Person.ill.select(:house_id))

关于ruby-on-rails - 事件记录查询不加载所有 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923039/

相关文章:

ruby-on-rails - ActionController::RoutingError: 未初始化的常量 MicropostsController

PostgreSQL 查询 : getting latest forecast before a deadline, 与实际比较

sql - 在不锁定表的情况下循环遍历 PL/PGSQL 中的 CURSOR

ruby-on-rails-3 - 在 Rails 应用程序中,我将在哪里存储静态/常量值?

ruby-on-rails - 从 url 加载 yaml 文件

ruby-on-rails - 获取自定义 attr_accessor 的未定义方法 `validates_presence_of'

ruby-on-rails - Jammit::MissingConfiguration - precache_all':需要 --base-url 选项才能生成 MHTML

ruby-on-rails - 使用 RedCloth 4.2.2 gem 在 Rails 3.0.1 中未初始化的常量

ruby-on-rails - Rails 找到有两个具有特定属性的子级的父级

java - JPA批量插入并不能提高性能