MySQL 联合索引的 B+ 树怎么按照联合字段顺序排序

冬涛姑娘_4213

冬涛姑娘_4213

2026-09-04

467人浏览

原创

mysql联合索引只建一棵b+树,按字段定义顺序逐级排序:先按city升序,相同city再按name升序,city和name都相同时再按age升序;非叶子节点仅存前缀值用于路由,叶子节点才存完整字段组合;跳过前导列(如仅查name)无法走索引,因无单独排序结构。

mysql 联合索引的 b+ 树怎么按照联合字段顺序排序

MySQL 联合索引的 B+ 树不是对每个字段单独建树,而是**只建一棵树,按字段定义顺序逐级排序**。这种排序方式直接决定了查询能否走索引、能用上几列。

排序规则:从左到右,多级嵌套

比如建了 INDEX idx_city_name_age (city, name, age),B+ 树的排序逻辑是:

  • 第一级:所有数据先按 city 升序排列(如 北京 → 广州 → 杭州 → 上海);
  • 第二级:相同 city 的记录,再按 name 升序排列(如“杭州”下的 张三 → 王五 → 钱七);
  • 第三级:cityname 都相同的记录,最后按 age 升序排列。

这就像查纸质电话簿:必须先翻到“姓氏”页(city),再在该姓氏下找“名字”(name),名字还重复时才看“中间名或年龄”(age)。

叶子节点实际存储顺序严格遵循该规则

以 (city, name) 索引为例,叶子节点中数据的真实物理顺序是:

city name 主键 id
杭州 张三 1
杭州 王五 3
杭州 钱七 5
北京 李四 2
上海 赵六 4
广州 周九 7

注意:没有“北京→张三”或“王五→杭州”这类跨顺序的组合——因为 B+ 树不支持跳过前导列重新排序。

Alibabacloud Sdk Client Initialization For Java
Alibabacloud Sdk Client Initialization For Java

在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。

下载

非叶子节点只存前缀,用于快速定位

非叶子节点(中间层)不存完整字段,只存用于导航的“最小前缀值”:

  • 根节点或内节点可能只存 city 值(如:北京、杭州、上海、广州);
  • 它们的作用是快速把查询路由到对应 city 的子树;
  • 只有落到叶子节点后,才会看到 city + name + 主键 的完整组合,并且 name 在同一 city 下是有序的。

为什么不能跳过左边字段?

因为 B+ 树没有为 name 单独建排序结构。如果执行 WHERE name = '张三',引擎无法知道“张三”分布在哪些 city 下、是否连续、从哪一页开始找——就像没写姓氏就让图书管理员找“小明”,他根本没法从书架头开始高效扫描。

同理,WHERE city = '杭州' AND age > 25 可以利用前两列(city 定位 + name 全局无序但 age 在 name 下有序),但 age 列之后的排序失效,无法用于范围或排序加速。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

1913

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1179

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

695

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

2492

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

4068

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

979

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

4351

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

3942

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

5054

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习