大网站建设公司,福田区网络建设,站长源码,网站加在线qq分析回答
当数据库一条记录里包含多个字段时#xff0c;一棵B树就只能存储主键#xff0c;如果检索的是非主键字段#xff0c;则主键索引失去作用#xff0c;变成顺序查找了。这时应该在第二个要检索的列上建立第二套索引。这个索引由独立的B树来组织。有两种常见的方…分析回答
当数据库一条记录里包含多个字段时一棵B树就只能存储主键如果检索的是非主键字段则主键索引失去作用变成顺序查找了。这时应该在第二个要检索的列上建立第二套索引。这个索引由独立的B树来组织。有两种常见的方法可以解决多个B树访问同一套表数据的问题一种叫做聚簇索引clustered index 一种叫做非聚簇索引secondary index。这两个名字虽然都叫做索引但这并不是一种单独的索引类型而是一种数据存储方式。
聚簇索引
聚簇索引存储来说行数据和主键B树存储在一起辅助键B树只存储辅助键和主键主键和非主键B树几乎是两种类型的树。
InnoDB使用的是聚簇索引将主键组织到一棵B树中而行数据就储存在叶子节点上若使用where id 14这样的条件查找主键则按照B树的检索算法即可查找到对应的叶节点之后获得行数据。若对Name列进行条件搜索则需要两个步骤第一步在辅助索引B树中检索Name到达其叶子节点获取对应的主键。第二步使用主键在主索引B树种再执行一次B树检索操作最终到达叶子节点即可获取整行数据。
非聚簇索引
非聚簇索引存储来说主键B树在叶子节点存储指向真正数据行的指针而非主键。
MyISM使用的是非聚簇索引非聚簇索引的两棵B树看上去没什么不同节点的结构完全一致只是存储的内容不同而已主键索引B树的节点存储了主键辅助键索引B树存储了辅助键。表数据存储在独立的地方这两颗B树的叶子节点都使用一个地址指向真正的表数据对于表数据来说这两个键没有任何差别。由于索引树是独立的通过辅助键检索无需访问主键的索引树。
聚簇索引 与 非聚簇索引区别
我们假想一个表如下图存储了4行数据。其中Id作为主索引Name作为辅助索引。图示清晰的显示了聚簇索引和非聚簇索引的差异。 我们重点关注聚簇索引看上去聚簇索引的效率明显要低于非聚簇索引因为每次使用辅助索引检索都要经过两次B树查找这不是多此一举吗聚簇索引的优势在哪
由于行数据和叶子节点存储在一起这样主键和行数据是一起被载入内存的找到叶子节点就可以立刻将行数据返回了如果按照主键Id来组织数据获得数据更快。辅助索引使用主键作为指针 而不是使用地址值作为指针的好处是减少了当出现行移动或者数据页分裂时辅助索引的维护工作使用主键值当作指针会让辅助索引占用更多的空间换来的好处是InnoDB在移动行时无须更新辅助索引中的这个指针。也就是说行的位置实现中通过16K的Page来定位后面会涉及会随着数据库里数据的修改而发生变化前面的B树节点分裂以及Page的分裂使用聚簇索引就可以保证不管这个主键B树的节点如何变化辅助索引树都不受影响。 喵呜面试助手一站式解决面试问题你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] - 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享