MySQL索引概述
目录
概述:
演示:
编辑索引的优点:
索引的缺点:
概述:
是帮助MySQL高效获取数据的数据结构(有序的)。
演示:
索引的优点:
-
提高数据检索的效率,降低数据库的IO成本,
-
通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
索引的缺点:
-
索引列也是需要占用空间的。
-
索引降低了更新表的速度,如对标进行DML语句的使用时效率降低。
MySQL的索引实在存储引擎层实现的,不同的存储引擎有不同的结构。
如果没有特别的指出,基本上都是B+树索引结构。、
为了解决大数据的情况下二叉树和红黑树的层级较深,使得查询的效率降低,我们使用b树来解决这个问题。
b+树的结构:
相较于b-树的区别:b+树的所有数据都会出现在叶子节点并且叶子节点形成一个单向列表。MySQL索引的数据结构对经典的b+树进行了优化,在原b+树的基础上,增加了一个指向相邻叶子节点的链表指针,就形成了带有顺序的b+树:
Hash索引:
- 哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,让后存储在hash表中。如果多个键值映射到相同相同的槽位上就会产生hash碰撞,可以通过链表解决。
在mysql中支持hash索引的存储引擎Memory引擎,在InnoDB中拥有自适应hash功能,hash索引是存储引擎根据b+树索引在指定条件下自动构建的。
面试问题:
为什么InnoDB存储引擎选择使用b+树索引结构呢?
-
相对于二叉树来说,层级更少,搜索效率更高。
-
对于b树来说,无论是叶子节点还是非叶子结点,都会保存数据,这样会导致一页中存储的键值减少,指针跟着减少,同样保存大量的树高度,导致性能降低,同时b+树来说查询更加稳定。
-
相对于hash索引来说,b+树支持范围匹配以及排序操作。