本届主要讲解索引的原理,Hash和B-Tree的原理,以及索引的优缺点和使用建议。
索引的原理
- 一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储的磁盘上。
- 这样的话,索引查找过程中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,所以评价一个数据结构作为索引的优劣最重要的指标就是在查找过程中磁盘I/O操作次数的渐进复杂度。
- 换句话说,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。
Hash算法
优点:通过字段的值计算的hash值,定位数据非常快。
缺点:不能进行范围查找,因为散列表中的值是无序的,无法进行大小的比较。
BTree算法
说起B-Tree算法,先要介绍二叉树的基本概念和特点。
特性:分为左子树、右子树和根节点,左子树比根节点值要小,右子树比根节点值要大
缺点:有可能产生不平衡 类似于链表的结构
特点:
a、它的左子树和右子树都是平衡二叉树
b、左子树比中间小,右子树比中间值
c、左子树和右子树的深度之差的绝对值不超过1
缺点:
a、插入操作需要旋转
b、支持范围查询,但回旋查询效率较低,比如要查找大于8的,会回旋到父节点7、10。
c、如果存放几百条数据的情况下,树高度越高,查询效率会越慢
BTree具体又分为B-Tree和B+Tree,一般都是使用B+Tree。
索引的特点
优点:
- 大大加快数据的查询速度
- 使用分组和排序进行数据查询时,可以显著减少查询时分组和排序的时间
- 创建唯一索引,能够保证数据库表中每一行数据的唯一性
- 在实现数据的参考完整性方面,可以加速表和表之间的连接
缺点:
- 创建索引和维护索引需要消耗时间,并且随着数据量的增加,时间也会增加
- 索引需要占据磁盘空间
- 对数据表中的数据进行增加,修改,删除时,索引也要动态的维护,降低了维护的速度
索引的使用原则
- 更新频繁的列不应设置索引
- 数据量小的表不要使用索引(毕竟总共2页的文档,还要目录吗?)
- 重复数据多的字段不应设为索引(比如性别,只有男和女,一般来说:重复的数据超过百分之15就不该建索引)
- 首先应该考虑对where 、 order by或group by 涉及的列上建立索引
声明:内容来源于B站视频《2022黑马程序员最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程》,博客内容仅作学习参考使用。