1、如何判断索引是否生效?

答:在查询语句前加上explain。
explain函数作用:显示了MYSQL如何使用索引来处理select语句以及连接表。

explain select id , name table where name like 'abc%'

在这里插入图片描述

2、索引失效的情况

  • 2.1、条件中有or

这里是引用

  • 2.2、like以%开头

在这里插入图片描述

  • 2.3、存在索引列的数据类型隐式转换

这里是引用

  • 2.4、where子句中对索引列有数学运算

这里是引用

2.5、where 子句里对有索引列使用函数,用不上索引

在这里插入图片描述

  • 2.6、复合索引未用左列字段

3、为什么Mysql用B+树做索引而不用B-树或红黑树?

答:查询效率是由磁盘IO的次数决定。

B-树:

每个节点都有数据域,增加了节点的大小,磁盘的IO次数也增加(因为一次磁盘IO读出的数据量大小是固定的,每次读出的数据少,IO次数就会增加)。

这里是引用


B+树相对B树的优点:

1、B+树的磁盘读写代价更低。

因为只有叶子节点存放数据,非叶子节点只存放索引,B树的每个索引节点都有data域。

2、B+树带有顺序访问指针。

所有的叶子节点之间有一个链指针,每个叶子节点都代表一个区间,从左到右也是有顺序的。而在数据库中基于范围的查询是非常频繁的,B树不支持这种遍历操作。

3、B+树的查询效率更加稳定。

由于非叶子节点存放的是数据的索引,而真正的数据存放在叶子节点中。而关键字查询的路径长度相同,因此每个数据的查询效率相当。
B树的非叶子节点也存放数据,因此不同的数据在不同层,查询效率也有高有低。

在这里插入图片描述

红黑树

红黑树是二叉查找树,在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。

而B+树是多路查找树,树的深度比红黑树小得多,而磁盘IO的次数和树的深度有很大关系。

综上

B+树相对于红黑树的优点:

1、高度比红黑树小,有效地减少了磁盘的随机访问;
2、B+树的数据节点临近,因此能发挥磁盘顺序读取的优势;
3、B+树的数据全部存在叶子节点,存储浪费小。

红黑树和B+树的比较:

1、使用场合。红黑树常用于存储内存中的有序数据,增删很快;B+树常用于文件系统和数据库索引。
2、子节点数量。红黑树只有两个子节点,而B+树有多个子节点,因此存储相同量的数据,B+树的高度更小。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐