Rails - 三个表列的查询索引

时间:2012-05-08 10:24:43

标签: mysql ruby-on-rails indexing

我有一个经常使用的查询:

Site.where("mobile_visible = true AND (created_at > :date OR updated_at > :date)", :date => "12-04-30")

它生成这个sql

SELECT `sites`.* FROM `sites` WHERE (mobile_visible = true AND (created_at > '12-04-30' OR updated_at > '12-04-30'))

我想添加一个或多个索引以使此查询更有效。我应该分别为3列添加3个索引,还是分别为所有3个列索引1个索引?

1 个答案:

答案 0 :(得分:2)

最好的方法是构建一个索引,它击中你所有元素的where子句 - 而不只是一个。

对于查询的特定部分,数据库通常不能一次使用多个索引。如果添加三个索引,数据库将尝试确定哪个索引具有最大的好处,并且将选择该索引。根据查询执行计划的确定方式,它可能会也可能不会选择最佳的。

对于这种情况,我建议添加索引:

add_index :sites, [:mobile_visible, :created_at, :updated_at]