Answers:
一点都不 !!!如果所需的主列在索引的最左侧,则MySQL Query Optimizer将做正确的事情。如果您确实创建了这样的索引,则如果您始终执行GROUP BY job_id,keyword_id,则MySQL Query Optimizer可能会选择不使用该索引。如果仅通过job_id收集记录,则MySQL Query Optimizer可能会使用索引,也可能不会使用索引,但是无论如何,您都会有多余的索引浪费空间。
如果表是MyISAM,则建立这样的索引只会使MYI文件膨胀。
如果该表是InnoDB且innodb_file_per_table为0,则建立这样的索引只会使ibdata1膨胀。
如果表是InnoDB,而innodb_file_per_table是1,则建立这样的索引只会使表的.ibd文件膨胀。
总而言之,您无需添加该额外索引!
索引只能group by
通过减少排序来加快操作-如果使用的索引是聚簇索引或至少具有与聚簇索引相同的前导列,这将更加高效。在所有这一切中,我假设MySQL没有等同于hash group by
通常会绕过索引的任何好处的操作-也许其他人可以确认这一点。
job_id
假设有单独的索引是该group by
子句中的唯一列,而聚集索引也不是,则有一个单独的索引是有好处的:索引会更小,因此对其进行扫描将生成更少的I / O
- 编辑 -
作为索引包含所有聚集索引键定义的主键字段不在二级索引,对索引job_id
只会比上的折射率小job_id, keyword_id
,如果keyword_id
是不聚集的索引的一部分。