Rails / Indexes性能Q - 哪个更快?

时间:2010-10-17 16:13:20

标签: mysql ruby-on-rails indexing

表格包含以下列:user_idseason_id 哪个更快:

#If I have a database index on user_id
Table.find_all_by_user_id(some_id)

#If I have a database index on user_id and season_id
Table.find_all_by_user_id_and_season_id(some_id, another_id)

多列索引总是更快吗?
例如,写一个多列索引更慢?如果是这样,我可以使用单列查询。

PS。该表有大约1.000.000记录并稳步增长!

2 个答案:

答案 0 :(得分:1)

索引取决于您需要执行的查询。 以下代码

Table.find_all_by_user_id(some_id)

不添加任何索引。以下是

add_index :table, :column

因此,如果您需要同时使用user_idseason_id执行查询,请添加复合索引。否则添加一个简单的索引。

答案 1 :(得分:0)

Table.find_all_by...与索引无关。无论列是外键还是索引,都会通过rails添加它们。如果您希望数据库对这些列建立索引,则需要在迁移中使用add_index手动添加它们。

你的例子正在完成两件完全不同的事情。一旦找到一列,另一列找到两列,它们将返回不同的结果。

如果你想知道哪个更快,你将不得不做一些基准测试。我建议阅读导轨指南。 http://guides.rubyonrails.org/performance_testing.html