我想知道是否需要将主键添加到特定表的复合索引中。
以这个查询为例:
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来提高性能吗?
1条答案
按热度按时间pieyvz9o1#
我假设表是innodb,因为它是默认的存储引擎。
不需要将主键添加到辅助索引。它已经包含在每个索引的末尾,即使您没有显式地添加它。
也就是说,在您显示的查询中,它可能无法将索引用于上的条件
id
,或order by,因为您有一个范围条件refreshed_at < '2018-01-05'
. 一旦将索引中的列用于范围条件,索引中的后续列将无助于搜索或排序。你可能会喜欢我的演讲:如何设计索引,真的。