【问题标题】:Do I need to have a secondary index to improve a query?我是否需要二级索引来改进查询?
【发布时间】:2014-01-31 11:54:32
【问题描述】:

假设我有下表

---------------------------------------
 ID   FOREIGN_KEY      TIMESTAMP
---------------------------------------
 1          1      2014-01-01 12:00:00
 2          2      2014-01-06 12:00:00
 3          2      2014-01-05 12:00:00
 4          1      2014-01-12 12:00:00
 5          3      2014-01-09 12:00:00

我运行查询以获取 FOREIGN_KEY=1MAX(timestamp)。这将返回上表中 ID = 4 的行。

为了提供一些上下文,表中最多可能有 1000 个重复的外键,每个外键都有唯一的时间戳。外键父表上可能有数千个唯一外键。

我的问题是,如果我在 FOREIGN_KEY 上有一个索引,是否值得在这个查询的时间戳上也有一个索引?

我假设当这个查询运行时,数据库首先获取与外键匹配的所有记录(这应该很快,因为它的索引)然后只是对返回的行进行线性搜索以找到最大时间戳.这是正确的吗?

如果是,我认为索引时间戳列没有意义,因为对最多 1000 行的线性搜索不应该花费太长时间。添加索引不会大大改善查询,但会消耗额外的存储空间。

我的假设正确吗?

【问题讨论】:

  • 我认为 (foreign_key,timestamp) 上的复合索引效果最好。
  • 简单的了解方法:使用当前设置测量性能。添加索引。在更改的系统中衡量性能。

标签: mysql performance innodb


【解决方案1】:

是的,您的假设是正确的。 如果 FOREIGN_KEY 列不重复太多,则日期索引可能是多余的。

虽然只是为了进行基准测试,但您可以尝试两种索引方案。

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多