Rails DB索引:这是反模式吗?

时间:2014-06-10 21:33:17

标签: ruby-on-rails database postgresql indexing

如果我认为我的应用程序运行的查询保证他们会在Rails 4应用程序(使用Postgresql)中设置这样的索引吗?只是检查,因为我不是一个索引专家,我不想意外地导致性能问题。下面的示例应该是一个连接表。谢谢!

add_index "foo_bars", ["foo_id", "bar_id"]
add_index "foo_bars", "foo_id"
add_index "foo_bars", "bar_id"

1 个答案:

答案 0 :(得分:0)

您可能只需要两个索引。您是否经常使用两列进行查询?如果是这样,请执行以下操作:

add_index "foo_bars", ["foo_id", "bar_id"]
add_index "foo_bars", ["bar_id", "foo_id"]

使用这两个,无论您要查询哪个列,您的数据库都应找到合适的索引。它可能不会节省任何空间,但这意味着您的数据库只需在数据发生变化时更新两个索引(而不是您可能会注意到速度差异)。

但是,我愿意打赌您的查询通常只包含foo_idbar_id(不是两者),因为您可能只是在遍历has_many关系大多数时候。如果是这种情况,只需在各列上定义索引即可。当您在两个列上进行查询时,PostgreSQL非常智能,可以合并索引。

add_index "foo_bars", "foo_id"
add_index "foo_bars", "bar_id"