我是否需要使用辅助索引来改进查询?

时间:2014-01-31 11:54:32

标签: mysql performance innodb

假设我有下表

---------------------------------------
 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行的线性搜索不应该花费太长时间。添加索引不会大大改善查询,但会占用额外的存储空间。

我的假设是否正确?

1 个答案:

答案 0 :(得分:0)

是的,您的假设是正确的。 如果FOREIGN_KEY列没有重复,那么日期索引可能是多余的。

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