ruby-on-rails - 使用 STI 查询数据库的效率

标签 ruby-on-rails database ruby-on-rails-3 indexing single-table-inheritance

我很好奇 Rails 如何查询使用 STI 的表。例如,如果我的父类是 Book 并且我有两个子类 ComicBookNovel 如果我做类似的事情

Novel.all.each

因为只有一张 table ,服务器是否也轮流浏览所有漫画书?是否自动添加了适当的索引以防止这种情况发生?谢谢

最佳答案

嗯,你不能做 Novel.eacheach 没有在模型类上定义。但是,您可以执行 Novel.all.each ...,其中 ... 是一些 block 。

至于查询是如何工作的,只需在任何 ARel 表达式上调用 to_sqlNovel.all 将返回模型集合本身,因此您需要更进一步确保通过调用 scoped 返回有效的 ARel 表达式。

[1] pry(main)> Novel.scoped.to_sql
=> "SELECT \"books\".* FROM \"books\" WHERE \"books\".\"type\" IN ('Novel')"

按经常查询的大多数列建立索引是一件值得考虑的好事。是的,如果没有索引,作为上述条件检查的一部分,您的 rdbms 将不得不查看表中的所有记录。

关于ruby-on-rails - 使用 STI 查询数据库的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15982158/

相关文章:

php - 将 MySQL 数据从旧 PHP 应用程序迁移到 Rails 应用程序

java - 数据库值插入错误

ruby-on-rails - 如何在 Rails 中从 JSON 创建对象

mysql - 将 scrumler 插件安装到 redmine 时出现内部错误

ruby-on-rails - 测试时未定义 stub

php - 添加文章到 Jooma 时出现 500 内部服务器错误! 3.5 数据库

database - 单元测试数据库转换有什么好的策略或工具? (不是单元测试数据库,而是转换)

ruby-on-rails - acts_as_tree 并通过子标题将值传播到项目

ruby-on-rails-3 - 导轨 3 : client_side_validations throwing alert on running unique validation

ruby-on-rails - Rails 3:路由错误 - 未初始化的常量 MyController::Google