一文了解MySQL二级索引的查询过程
聚簇索引就是innodb默认创建的基于主键的索引结构,而且表里的数据就是直接放在聚簇索引里,作为叶节点的数据页:
基于主键的数据搜索:从聚簇索引的根节点开始进行二分查找,一路找到对应数据页,基于页目录就直接定位到主键目标数据。
若想对其它字段建立索引,甚至是基于多个字段建立联合索引,此时索引结构又是咋样?
假设对其他字段建立索引,如name、age之类,都是一样原理。比如你插入数据时:
把完整数据插入聚簇索引的叶节点的数据页,同时维护好聚簇索引 为你其他字段建立的索引,重新再建立一颗B+树比如你基于name字段建立了一个索引,当插入数据时,就会重新搞一颗B+树,B+树的叶节点也是数据页,但该数据页里仅放主键字段和name字段:
这是独立于聚簇索引之外的另一个name字段的B+索引树,其叶节点的数据页仅存放主键和name字段值。
整体排序规则都跟聚簇索引按照主键的排序规则是一样,即:
叶节点的数据页中的name值都是排序的 下一个数据页里的name字段值都>上一个数据页里的name字段值name字段的索引B+树也会构建多层级的索引页,索引页里存放:
下一层的页号 最小name字段值,根据name字段值排序。所以若你根据name字段查数据,过程也一样,从name索引树的根节点开始,一层一层往下找,一直找到叶节点的数据页,定位到name字段值对应的主键值。
然后针对
select * from t where name= xx这种语句,先根据name值在name索引树里找,找到叶节点,也仅能找到对应主键值,而找不到这行数据的所有字段。
所以还需回表:还需根据主键值,再到聚簇索引里从根节点开始,找到叶节点的数据页,定位到主键值对应的完整数据行,此时才能把select *要的全部字段值都取出。
比如name+age,运行流程同理,建立一个独立的B+树,叶节点的数据页存放id+name+age后,默认按name排序,name一样就按age排,不同数据页之间的name+age值的排序也如此。
然后这个name+age的联合索引的B+树的索引页存放:
下一层节点的页号 最小的name+age的值所以当你根据name+age搜索时,就会走name+age联合索引树,搜索到主键,再根据主键到聚簇索引里去搜索。
本篇文章到此结束,如果您有相关技术方面疑问可以联系我们技术人员远程解决,感谢大家支持本站!
在数据页里更新数据维护你所有的索引
到此这篇关于MySQL二级索引查询过程的文章就介绍到这了,更多相关MySQL二级索引查询过程内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 一文了解MySQL二级索引的查询过程
相关文章
- 【说站】mysql覆盖索引的优点探究
- 灵活运用MySQL过程和游标实现数据查询(mysql过程游标)
- MySQL策略: 均衡负载优化(mysql均衡负载)
- MySQL:值得信赖的稳定版本(mysql稳定版本)
- MySQL重装系统:重新开始(mysql重装系统)
- MySQL索引创建的必要条件(mysql建索引的要求)
- MySQL索引引擎:优化数据库查询的新方法(mysql索引引擎)
- 快速精准掌握MySQL查询代码(mysql查询代码)
- MySQL使用IN运算符的查询实践(mysql使用in查询)
- MySQL查询函数解析与实践(mysql查询数据库函数)
- MySQL查询优化技巧:使用先排序再分组策略(mysql先排序在分组)
- MySQL 快速查询编码技巧(mysql查询编码)
- MySQL多表查询的高效优化技巧(mysql多表查询优化)
- MySQL过滤查询:灵活性之道.(mysql过滤查询)
- MySQL 使用分组函数的简单操作指南(mysql分组函数)
- MySQL中文索引优化技巧(mysql索引中文)
- 如何导入MySQL数据库数据?(mysql数据库数据导入)
- 空间无界 MySQL:跨越空间的无限可能(mysql 除以)
- 从MSSQL到MySQL:连接两个数据库的实践指南(mssql链接mysql)
- 尽情实战,MySQL语句练习精进步(mysql语句练习)
- Mysql查询优化小技巧避免or查询不走索引(mysql中or不走索引)
- MySQL中的INT数据类型默认值(mysql中int默认值)
- 解决MySQL两表查询报错问题(mysql两表查询报错)
- 快速使用bat连接MySQL数据库(bat 连接mysql)
- 在cmd命令行下使用MySQL处理数据(cmd下执行mysql)
- MySQL内联合查询优化实例三表联合查询(mysql三表内联合查询)
- 深入了解MySQL三列比较技巧,优化你的数据库查询效率(mysql三列比较)
- MySQL索引详解一二级索引的区别与选择方法(mysql 一二级索引)
- 深入剖析MySQL中的字符类型(mysql zifu)
- MySQL查询中实现非递归操作(mysql不用递归)