【发布时间】:2013-09-11 16:37:30
【问题描述】:
如果我在 ActiveRecord 按列排序应用范围,例如
User.order("name")
我应该确保name 列上存在索引吗?或者只有在我执行where 子句时才需要索引。
【问题讨论】:
-
拥有一个索引绝对是有好处的,这样DBMS就可以使用索引进行排序而无需额外的排序。
-
答案取决于各种各样的事情。例如:您多久执行一次此查询(即维护索引的开销是否会超过没有索引的排序成本)?当您检查带有和不带有索引的查询计划时,您的数据库会说什么?您可能确实需要索引,但也可能不需要,这取决于您在做什么以及您的数据是什么样的。
-
@muistooshort 是否有一种简单的方法可以使用 Rails 检查索引是否有益?加载一堆记录并以某种方式查询?
-
最简单的方法是加载一堆记录,弄清楚你将使用什么样的 SQL,然后使用你的数据库版本的 EXPLAIN 来查看数据库对你的 SQL 的看法.基本上,把 Rails 推开,弄脏你的手。 IMO 无论如何,您都应该将数据库视为一个单独的应用程序;我知道 Rails 想假装数据库本身并不真正存在,但这是一种愚蠢的态度。
标签: ruby-on-rails database activerecord indexing