我有一个经常使用的查询:
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个索引?
答案 0 :(得分:2)
最好的方法是构建一个索引,它击中你所有元素的where子句 - 而不只是一个。
对于查询的特定部分,数据库通常不能一次使用多个索引。如果添加三个索引,数据库将尝试确定哪个索引具有最大的好处,并且将选择该索引。根据查询执行计划的确定方式,它可能会也可能不会选择最佳的。
对于这种情况,我建议添加索引:
add_index :sites, [:mobile_visible, :created_at, :updated_at]