
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
索引的学习与应用是每一位软件编程开发程序员都需要熟练掌握的一个编程技术,而本文我们就通过案例分析来简单了解一下,MySQL数据库常见索引类型分享。
聚簇索引(clusteredindex)
聚簇索引并不是一种单独的索引类型,而是一种数据存储的方式。在InnoDB中聚簇索引实际上是在同一个结构中保存了B+索引和数据行。
聚簇字面意思就是数据行和索引紧紧在一起的存储在一起。因为一个索引只能和一个数据存储在一起,所以一个表中只有一个聚簇索引。
下面这里来讨论下InnoDB中聚簇索引的实现。
InnoDB中必有要求有聚簇索引的存在,默认会在主键上建立聚簇索引,如果没有主键字段,表中一个非空索引将会被建立聚簇索引,在前面两者都没有的情况下,InnoDB将自动生成一个隐式的自增id列,并在此列上建立聚簇索引。
mysql
聚簇索引的优点
数据访问更快,因为聚簇索引将索引和数据保存在同一个B+树中,因此从聚簇索引中获取数据比非聚簇索引更快。
缺点
1、插入速度严重依赖于插入顺序,按照主键的顺序插入是快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,一般都会定义一个自增的ID列为主键;
2、更新聚簇索引的代价很高,因为会强制InnoDB将每个更新的行移动到新的位置;
3、二级索引访问可能需要经过两次查找。
二级索引中保存的不是指向行的物理位置的指针,而是行的主键值,这就意味着通过二级索引查找行,存储引擎需要找到二级索引的叶子结点获取对应的主键值,然后根据这个值去聚簇索引中找到对应的行。所以有两次的查找过程,这种叫做回表操作,在InnoDB中,自适应哈希索引能够减少这样重复的工作。
非聚簇索引(non-clusteredindex)
非聚簇索引也叫二级索引或者辅助索引,辅助索引叶子节点存储的不是具体的行数据,而是行的主键值,所以使用辅助索引会面临二次查找的问题,也就是回表。存储引擎需要找到二级索引的叶子结点获取对应的主键值,然后根据这个值去聚簇索引中找到对应的行。所以有两次的查找过程,这种就叫做回表查询,在InnoDB中,自适应哈希索引能够减少这样重复的工作。
mysql
联合索引
联合索引指对表上多个列进行索引,联合索引的创建方法和单列索引的创建方法一样,不同的是联合索引有多个索引列。
联合索引中有一个很重要的原则就是左匹配原则,即左优先,在检索数据时从联合索引的左边开始匹配。
覆盖索引
索引确实能够提高查询的效率,但二级索引会有某些情况会存在二次查询也就是回表的问题,这种情况合理的使用覆盖索引,能够提高索引的效率,减少回表的查询。
覆盖索引将需要查询的值建立联合索引,这样索引中就能包含查询的值,这样查询如果只查询索引中的值和主键值就不用进行二次查询了,因为当前索引中的信息已经能够满足当前查询值的请求。
回表查询
回表查询可以理解为二级索引的查询,先定位主键然后,在定位行记录的过程,它的性能相较于一次就定位到数据的查询,效率更低。
一般建立的索引,不管是单列索引还是联合索引,一个索引就对应一课独立的B+树,索引B+树的节点仅仅包含了索引中几个常见的字段以及主键值。
如果根据索引查找到了需要的数据,如果查询的值仅仅是索引中的值和主键值,那么这时候是不需要进行二次查询的,也就是回表查询,因为当前索引中的信息已经能够满足当前查询值的请求,如果查询的字段是还有其他的字段,这种情况,索引中的值不能覆盖了,就需要二次查询了,通过主键值去聚簇索引中找到对应的行,然后返回。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。