-
三、B+Tree索引的前世今生
-
- 1、二叉排序树
-
2、AVL树 (自平衡二叉查找树)
-
3、B树(Balanced Tree)多路平衡查找树 多叉的
-
4、B+ Tree (B+树是B树的变体,也是一种多路搜索树)
-
四、为什么MySQL索引选择了 B+树 而不是 B树?
-
五、程序员,你应该知道的索引知识点
-
- 1、回表查询
-
2、索引覆盖
-
3、最左前缀原则
-
4、索引下推优化
-
六、使用索引时的注意事项
-
- 1、索引不会包含有null值的列
-
2、使用短索引
-
3、索引列排序
-
4、like语句操作
-
5、不要在列上进行运算
-
6、不使用not in和<>操作
-
我的体会
=======================================================================
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
当表中有大量记录时,若要对表进行查询,第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足条件的记录,这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操作;第二种就是在表中建立索引,然后在索引中找到符合查询条件的索引值,最后通过保存在索引中的ROWID(相当于页码)快速找到表中对应的记录。
MySQL5.5以后InnoDB储引擎使用的索引数据结构主要用:B+Tree;本篇文章带大家以B+Tree前世今生为主线来聊一聊;
Mark:
B+Tree可以对<,<=,=,>,>=,BETWEEN,IN,以及不以通配符开始的LIKE使用索引。(MySQL5.5后)
这些事实或许会颠覆你的一些认知,比如在你读过的其他文章或书中。以上这些都属于“范围查询”,都是不走索引的!
没错,早先5.5以前优化器是不会选择通过索引搜索的,优化器认为这样取出的行多与全表扫描的行,因为还要回表查一次嘛,可能会涉及I/O的行数更多,被优化器放弃。
经过算法(B+Tree)优化后,支持对部分范围类型的扫描(得利与B+Tree数据结构的有序性)。该做法同时也违反了最左前缀原则,导致范围查询后的条件无法用到联合索引,我们在后面详细说明。