ruby-on-rails-4 - 更好地使用每个并检查类型与在哪里过滤 ActiveRecord 关系中的类型
问题描述
想知道说事件是否是一个 ActiveRecord 关系,这......
events.each do |e|
next unless e.game?
....
比这还糟糕……
es = events.where(event_type: "game")
es.each do |e|
....
我在想通过 SQL 过滤可能比遍历每个更快,但不确定遍历每个是否在性能上没有不同
解决方案
每个都慢得多。您应该始终将 ActiveRecord 方法/查询优先于普通 Ruby。
es = events.where(event_type: "game")
es.find_each do |e|
....
events.where(...)
将返回一个 ActiveRecord 关系。因此,您可以使用find_each
. 文档建议不要find_each
在小型集合上使用,但我喜欢计划可伸缩性
编辑:如果您有任何限制或偏移量,find_each
将忽略限制并使用将find_in_batches
限制覆盖为 1000 的默认值。
推荐阅读
- python - 使用 django 和 cassandra 进行迁移时出现类型错误
- airflow - 使用 SubDagOperator 的 schedule_interval 和其他问题
- php - 如何使用 json 编码(Symfony 4)从 mysql 数据库中获取数据?
- android - React-Native“网络请求失败”与Android上的表单数据
- javascript - Jasmine - 监视未调用“new myFunction()”
- sql - Presto 性能调整,并行执行时查询要慢得多
- python - 如何使用子字符串对这个字符串列表进行排序?
- excel - 当我在 Excel 电子表格中的工作表之间链接单元格时,如何包含格式(颜色)?
- html - 在 ionic 2x 中切换更改嵌套按钮颜色
- c# - 二叉树的结构