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

4

我被投入到一个设计不良的系统中。现在我正在管理他们的数据库,遇到了很多像下面这样的情况(伪代码):

Table t1{
c1;
c2;
c3;
c4;

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

由于已经有包含这些列的多列索引,因此单列索引是否真的必要?

另一方面,既然已经有单列索引,那么多行列是否必需?

2个回答

6

关于 MySQL如何使用索引 的文档页面中的简短摘录:

如果表具有多列索引,则优化器可以使用索引的任何左前缀来查找行。例如,如果您在 (col1, col2, col3) 上有一个三列索引,则您可以在 (col1)、(col1,col2) 和 (col1,col2,col3) 上进行索引搜索。有关更多信息,请参见 第8.3.5节,“多列索引”

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


太好了。非常感谢! - Lestat86
对于Postgres来说,答案是一样的:https://dba.stackexchange.com/questions/27481/is-a-composite-index-also-good-for-queries-on-the-first-field - Ismail Yavuz

3

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

你只需要在(c2)(c1, c2, c3)上创建两个索引即可。

MySQL在复合索引方面有相当好的文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接