如果该字段上的多列索引已存在,我是否需要向表添加新的单列索引?

JIS*_*one 10 mysql index

我有一个表,UNIQUE_job_id__和上有一个多列索引__keyword_id__

__job_id__如果我有一个GROUP BY对该列执行 a 的频繁查询,我还需要添加另一个索引吗?

(在 1 亿行时可能需要一段时间。这就是为什么我要问而不仅仅是做)

Rol*_*DBA 5

一点都不 !!!如果所需的主列位于索引的最左侧,MySQL 查询优化器将执行正确的操作。如果您确实创建了这样的索引,并且您始终执行 GROUP BY job_id,keyword_id,则 MySQL 查询优化器可能会选择从不使用该索引。如果您仅通过 job_id 收集记录,MySQL Query Optimizer 可能会或可能不会使用该索引,但是无论如何您都有一个冗余索引浪费空间。

如果表是 MyISAM,那么创建这样的索引只会使 MYI 文件膨胀。

如果表是 InnoDB 并且 innodb_file_per_table 是 0,那么创建这样的索引只会使 ibdata1 膨胀。

如果表是 InnoDB 并且 innodb_file_per_table 是 1,那么创建这样的索引只会使表的 .ibd 文件膨胀。

总之,您不需要制作额外的索引!!!