ChatGPT3.5使用体验( 九 )


总结
1、索引的优点:
2、 中模式的索引模型是 B+ 树索引;
3、B 树简单的讲就是一种多叉平衡查找树,它类似于普通的平衡二叉树 。不同的是 B-tree 允许每个节点有更多的子节点,这样就能大大减少树的高度;
4、聚簇索引;
聚簇索引并不是一种单独的索引类型,而是一种数据存储的方式 。在中聚簇索引实际上是在同一个结构中保存了 B+ 索引和数据行 。
聚簇字面意思就是数据行和索引紧紧在一起的存储在一起 。因为一个所以只能和一个数据存储在一起,所以一个表中只有一个聚簇索引 。
5、非聚簇索引;
非聚簇索引也叫二级索引或者辅助索引,辅助索引叶子节点存储的不是具体的行数据,而是行的主键值,所以使用辅助索引会面临二次查找的问题,也就是回表 。存储引擎需要找到二级索引的叶子结点获取对应的主键值,然后根据这个值去聚簇索引中找到对应的行 。所以有两次的查找过程,这种就叫做回表查询,在中,自适应哈希索引能够减少这样重复的工作 。
6、联合索引;
联合索引指对表上多个列进行索引,联合索引的创建方法和单列索引的创建方法一样,不同的是联合索引有多个索引列 。
联合索引中有一个很重要的原则就是最左匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配 。
7、覆盖索引;
索引确实能够提高查询的效率,但二级索引会有某些情况会存在二次查询也就是回表的问题,这种情况合理的使用覆盖索引,能够提高索引的效率,减少回表的查询 。
覆盖索引将需要查询的值建立联合索引,这样索引中就能包含查询的值,这样查询如果只查询 索引中的值和主键值 就不用进行二次查询了,因为当前索引中的信息已经能够满足当前查询值的请求 。
8、回表查询;
回表查询可以理解为二级索引的查询,先定位主键然后,在定位行记录的过程,它的性能相较于一次就定位到数据的查询,效率更低 。
一般建立的索引,不管是单列索引还是联合索引,一个索引就对应一课独立的 B+ 树,索引 B+ 树的节点仅仅包含了索引中几个常见的字段以及主键值 。
如果根据索引查找到了需要的数据,如果查询的值仅仅是索引中的值和主键值,那么这时候是不需要进行二次查询的,也就是回表查询,因为当前索引中的信息已经能够满足当前查询值的请求,如果查询的字段是还有其他的字段,这种情况,索引中的值不能覆盖了,就需要二次查询了,通过主键值去聚簇索引中找到对应的行,然后返回 。
【ChatGPT3.5使用体验】所以说非聚簇索引一定会回表查询吗,答案是否定的,这涉及到查询语句所要求的字段是否全部命中了索引,如果是,那么就不需要回表查询 。