(1)重复索引:
指的是在对应列上,以相同的顺序不同的索引名称建立了多套一模一样的联合索引(单值索引也有,不过相对来说没那么奇葩做这种事),例如:
ALTER TABLE a ADD INDEX ‘idx_1’ (‘id’,’name’,’sex’)
ALTER TABLE a ADD INDEX ‘idx_2’ (‘id’,’name’,’sex’)
ALTER TABLE a ADD INDEX ‘idx_3’ (‘id’,’name’,’sex’)
这三个就是重复索引,占用三倍的索引磁盘存储空间,降低了SQL查询优化器判断选择的性能。非常不可取!
(2)冗余索引:
指的是不同的联合索引组合,某一列或者几列字段被多组索引覆盖,一般称这些列存在冗余索引,例如:
ALTER TABLE a ADD INDEX ‘idx_1’ (‘id’,’name’,’sex’)
ALTER TABLE a ADD INDEX ‘idx_2’ (‘id’,’name’,’phone’)
ALTER TABLE a ADD INDEX ‘idx_3’ (‘id’,’name’,’address’)
ALTER TABLE a ADD INDEX ‘idx_4’ (‘id’,’name’)
这种创建方式,套在id,name两个列上的索引会有4个,我们知道索引的前置匹配规则,id,name套了四层,树结构也会冗余四层,这是非常浪费空间的,同时在查询的时候,由于id和name有四种索引可以选择,SQL优化器的性能也会受影响,这种方式虽然很多时间没办法避免,但是可