3

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

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 个索引还是分别为所有三列添加 1 个索引?

4

1 回答 1

2

最好的方法是构建一个索引,该索引会命中 you're where 子句的所有元素——而不仅仅是一个。

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

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

add_index :sites, [:mobile_visible, :created_at, :updated_at]
于 2012-05-08T10:28:07.803 回答