mysql中允许创建多个相同的索引,在创建后msyql需要单独维护这些索引,而且在查询的时候优化器也需要逐个的去考虑这些索引,因此这会降低性能.在mysql中索引一般有重复索引和冗余索引两种.
重复索引
重复索引是指多个完全相同的索引,经常在无意中会创建这样的索引,例如同时给一个主键创建索引和设置为unique
,由于主键本身就是唯一索引,然后unique
的实现方式也是通过索引来实现的,因此在这种情况下就产生了三个索引,这是没有必要的,因此对于重复索引可以找出来删除掉
冗余索引
冗余索引是指多个具有包含关系的索引,例如索引(A,B)和(A)
但索引冗余并非完全都是坏处,在某些情况下其能提升性能,例如现在有索引key(A)
,这时需要增加一个索引字段B,B是一个很长的字段,这个时候如果直接在原索引上增加字段B,那么对于原来的仅使用了A的索引查询速度就会变慢.在这种情况同时存在(A)和(A,B)索引对查询性能可能更好,但是对于更新插入操作性能会变得更差,因此需要在这两方面权衡.
网友评论