我被丢弃在一个设计不佳的系统中。现在我在他们的数据库上做DBA,我有很多情况如下(伪代码):
Table t1{
c1;
c2;
c3;
c4;
key(c1);
key(c2);
key(c1,c2);
key(c1,c2,c3);}
单列索引是否真的有必要,因为我已经有一个包含那些列的多列?
或者另一方面 - 因为我已经有单列列,所以需要多行列?
答案 0 :(得分:2)
文档页面中有关how MySQL uses indexes的简短摘录:
如果表具有多列索引,则优化程序可以使用索引的任何最左前缀来查找行。例如,如果您在(
col1
,col2
,col3
)上有三列索引,则您已在(col1
)上编入了搜索功能的索引,({{1 },col1
)和(col2
,col1
,col2
)。有关更多信息,请参阅Section 8.3.5, “Multiple-Column Indexes”。
您最好删除col3
和(c1)
上的索引。它们没有被使用,但它们使用存储空间并且在表数据发生变化时消耗处理器能力以保持最新。
答案 1 :(得分:1)
(c2)
上的单列索引是多余的。两列索引也是三列索引的冗余。
您需要的唯一两个索引位于(c1, c2, c3)
和chance
。
MySQL对复合索引有pretty good documentation。