我被投入到一个设计不良的系统中。现在我正在管理他们的数据库,遇到了很多像下面这样的情况(伪代码):
Table t1{
c1;
c2;
c3;
c4;
key(c1);
key(c2);
key(c1,c2);
key(c1,c2,c3);}
由于已经有包含这些列的多列索引,因此单列索引是否真的必要?
另一方面,既然已经有单列索引,那么多行列是否必需?
我被投入到一个设计不良的系统中。现在我正在管理他们的数据库,遇到了很多像下面这样的情况(伪代码):
Table t1{
c1;
c2;
c3;
c4;
key(c1);
key(c2);
key(c1,c2);
key(c1,c2,c3);}
由于已经有包含这些列的多列索引,因此单列索引是否真的必要?
另一方面,既然已经有单列索引,那么多行列是否必需?
关于 MySQL如何使用索引 的文档页面中的简短摘录:
如果表具有多列索引,则优化器可以使用索引的任何左前缀来查找行。例如,如果您在 (
col1
,col2
,col3
) 上有一个三列索引,则您可以在 (col1
)、(col1
,col2
) 和 (col1
,col2
,col3
) 上进行索引搜索。有关更多信息,请参见 第8.3.5节,“多列索引”。
最好删除 (c1)
和 (c1,c2)
上的索引。它们没有被使用,但会占用存储空间,并在表数据更改时消耗处理器资源以保持最新。