Mysql 有多列索引时是否需要单列索引?

Mysql 有多列索引时是否需要单列索引?,mysql,database-indexes,Mysql,Database Indexes,我被丢弃在一个设计拙劣的系统中。现在我在他们的数据库上做DBA,我有很多类似下面的情况(伪代码): 既然我已经有了一个包含这些列的多列索引,那么单列索引真的有必要吗 或者在另一方面,由于我已经有了单行列,所以需要多行列吗 c1上的单列索引是冗余的。两列索引与三列索引也是冗余的 您只需要在(c2)和(c1、c2、c3)上使用两个索引 MySQL提供了关于复合索引的详细信息。文档页面的一个简短摘录,内容涉及: 如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀查找行。例如,如果在(col1,c

我被丢弃在一个设计拙劣的系统中。现在我在他们的数据库上做DBA,我有很多类似下面的情况(伪代码):

既然我已经有了一个包含这些列的多列索引,那么单列索引真的有必要吗


或者在另一方面,由于我已经有了单行列,所以需要多行列吗

c1上的单列索引是冗余的。两列索引与三列索引也是冗余的

您只需要在
(c2)
(c1、c2、c3)
上使用两个索引


MySQL提供了关于复合索引的详细信息。

文档页面的一个简短摘录,内容涉及:

如果表具有多列索引,则优化器可以使用索引的任何最左侧前缀查找行。例如,如果在(
col1
col2
col3
)上有三列索引,则在(
col1
),(
col1
col2
)和(
col1
col2
col3
)上有索引搜索功能。有关详细信息,请参阅


最好删除
(c1)
(c1,c2)
上的索引。它们没有被使用,但它们使用存储空间并消耗处理器功率,以便在表数据更改时保持最新状态。

这太完美了。谢谢!
Table t1{
c1;
c2;
c3;
c4;

key(c1);
key(c2);
key(c1,c2);
key(c1,c2,c3);}