在ID列表中找到更好的解决方案?

Coc*_*oco 1 activerecord ruby-on-rails where-in rails-activerecord

假设我有一个id数组,可能大约有100000个id.在我无法创建临时表来进行JOIN的情况下.对我来说简单的解决方案是:

Product.where(id: ids)
Run Code Online (Sandbox Code Playgroud)

WHERE IN当数组很大时,这将生成似乎伤害Mysql 的子句.我想知道是否有更好的解决方案?

Tom*_*oss 5

如果它是一个连续范围,你可以尝试使用BETWEEN- Product.where id: 1..100000将做的伎俩.

否则,whole_array_of_ids.each_slice(number_of_ids_mysql_can_handle){ |ids| Product.where(id: ids) }- 多个查询,但仍然可管理.在这里阅读every_slice和更多好东西.

此外,许多AR查找程序方法都有batch_sizeparam,但它似乎对你没有帮助,因为它将构造包含所有id的整个查询,然后LIMIT在最后拍a .