mysql - 我是否需要有二级索引来改进查询?

标签 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 行的线性搜索不会花费太长时间。添加索引不会对查询有太大改善,但会消耗额外的存储空间。

我的假设正确吗?

最佳答案

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

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

关于mysql - 我是否需要有二级索引来改进查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479482/

相关文章:

php - 如何使用另一个 MySQL 表中的现有数据填充预选的下拉字段?

java - ArrayList 删除与 removeAll

python - 使用 list(filter()) 的程序在 python 3 上运行速度极慢

MySQL : Can I use one SELECT . .. 更新到 "protect"多个表? (锁定)

mysql - 缓慢的 auto_increment 重置

mysql - 带有错误编码字符的大型 MYSQL 转储

MySQL 查询返回同一数据字段的 2 个计数

mysql - 来自mysql的内存不足错误

python - 在 Python 中与集合相交的最有效方法是什么?

mysql - 有没有办法在下次重新启动之前禁用特定 mysql 数据库的区分大小写选项?