我应该将ID(主键)添加到表的复合索引吗?

时间:2018-01-08 16:50:00

标签: mysql sql database

我想知道是否需要将主键添加到特定表的复合索引中。

让我们以此查询为例:

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个字段:

  1. ID(列表表的主键)
  2. account_id
  3. refreshed_at
  4. 到目前为止,我有以下索引: [&#34; account_id&#34;,&#34; refreshed_at&#34;]

    我应该在复合键中添加ID以提高性能吗?

1 个答案:

答案 0 :(得分:2)

我认为该表是InnoDB,因为它是默认的存储引擎。

您无需将主键添加到辅助索引。它已经包含在每个索引的末尾,即使您没有明确添加它。

也就是说,在您显示的查询中,它可能无法在id或ORDER BY上使用您的条件索引,因为您有一个范围条件refreshed_at < '2018-01-05'。在索引中使用范围条件的列后,索引中的后续列无助于搜索或排序。

您可能会喜欢我的演示文稿:How to Design Indexes, Really