我想知道是否需要将主键添加到特定表的复合索引中。
让我们以此查询为例:
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个字段:
到目前为止,我有以下索引: [&#34; account_id&#34;,&#34; refreshed_at&#34;]
我应该在复合键中添加ID以提高性能吗?
答案 0 :(得分:2)
我认为该表是InnoDB,因为它是默认的存储引擎。
您无需将主键添加到辅助索引。它已经包含在每个索引的末尾,即使您没有明确添加它。
也就是说,在您显示的查询中,它可能无法在id
或ORDER BY上使用您的条件索引,因为您有一个范围条件refreshed_at < '2018-01-05'
。在索引中使用范围条件的列后,索引中的后续列无助于搜索或排序。
您可能会喜欢我的演示文稿:How to Design Indexes, Really。