我应该在表的复合索引中添加id(主键)吗?

c3frrgcw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(396)

我想知道是否需要将主键添加到特定表的复合索引中。
以这个查询为例:

SELECT id
FROM listings
WHERE account_id = 123 AND
      refreshed_at < '2018-01-05 09:33:15.314763' AND
      id > 123456
ORDER BY id ASC
LIMIT 1000

我们可以看到这里有3个字段被查询:
id(listings表的主键)
帐户\u id
刷新\u at
到目前为止,我有以下索引:[“account\u id”,“refreshed\u at”]
我应该向复合键添加id来提高性能吗?

pieyvz9o

pieyvz9o1#

我假设表是innodb,因为它是默认的存储引擎。
不需要将主键添加到辅助索引。它已经包含在每个索引的末尾,即使您没有显式地添加它。
也就是说,在您显示的查询中,它可能无法将索引用于上的条件 id ,或order by,因为您有一个范围条件 refreshed_at < '2018-01-05' . 一旦将索引中的列用于范围条件,索引中的后续列将无助于搜索或排序。
你可能会喜欢我的演讲:如何设计索引,真的。

相关问题