【问题标题】:Rails - index for a query over three table columnsRails - 对三个表列的查询的索引
【发布时间】:2012-05-16 19:54:33
【问题描述】:

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

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 个索引?

【问题讨论】:

    标签: mysql ruby-on-rails indexing


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您解释为什么要这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 2015-02-06
    相关资源
    最近更新 更多