mysql中可以为同一个列创建不同名称的索引

最近工作一直做的是数据迁移方面的工作,在数据库表中核对索引时发现mysql中的对一个字段创建了两个不同名字的索引,这个也不是复合索引,只是一个普通的索引。当初不明白如何这样做。这样是不是有问题呢,经过了解,oracle是不允许的,mysql和sqlserver是允许这样做额,为何要这样做呢?这样做弊端有哪些呢?先看下具体的索引所示:

mysql中可以为同一个列创建不同名称的索引_第1张图片
再看下查询的时候走的索引:
mysql中可以为同一个列创建不同名称的索引_第2张图片
这里默认走了第一个那么第二个就是没有用的,所以这里建议去掉一个。
mysql中可以为同一个列创建不同名称的索引_第3张图片
mysql为一个字段创建不同名称的索引值是允许的,但是不建议这样做,因为索引都是需要维护的,增删改涉及到了此列时原本要改一次的操作,现在就需要改多次了。浪费空间,浪费操作。(从ibd文件中能看出这个浪费)
这里再说一些关于索引的:
索引的原理: 索引是一个B+二叉树。从原理上说B+二叉树的特性 决定了对insert、update、delete、select的影响和作用。
索引优点:查询效率变快。
索引缺点:建立索引过多,会影响insert速度。
如果新insert一个值,会导致B+二叉树进行再平衡重整,这个过程B+二叉树进行重新整理,索引越大,索引越多,重新整理的时间花费越大。所以有时候再进行大批量insert插入时,我们会不建立索引,等数据全部insert完毕,再建立索引

你可能感兴趣的:(数据库)