mysql索引底层B+树

B+树胜出的关键特性:

矮胖树结构:3-4层高度即可存储2000万条记录(假设每页存1000条)

叶子链表:所有数据存储在叶子节点,并通过双向链表连接

非叶导航:非叶子节点仅存储键值,不保存数据,提升节点容量

  1. 实战案例:索引如何加速查询?

2.1 案例1:超市储物柜系统

2.1.1 场景描述

表结构:2000个储物柜,字段包括柜号(主键)、手机号、使用时间等。

高频查询:用户通过手机号查找柜号(SELECT * FROM lockers WHERE phone='13812345678')。

2.1.2 无索引的代价

全表扫描2000条数据,平均需访问1000次磁盘页(假设每页20条记录)。

2.1.3 创建索引后的优化

CREATE INDEX idx_phone ON lockers(phone);

查询过程:

从根节点定位手机号138所在的页。

中间层定位到1381234的分支。

叶子层找到13812345678对应的柜号。

根据柜号直接访问目标数据页。

磁盘I/O次数:3次(树高3层) vs 全表扫描的100次。

2.2 案例2:医院叫号系统的联合索引

2.2.1 联合索引设计

ALTER TABLE patients ADD INDEX idx_dept_status_time(department, status, register_time);

最左前缀原则:

有效查询:WHERE department='心血管科' AND status='待就诊'(使用前两列)。

无效查询:WHERE status='待就诊'(跳过第一列,触发全表扫描)。

2.2.2 索引覆盖优化

SELECT id, department FROM patients WHERE department='心血管科';

若索引包含所有查询字段,直接返回索引数据,无需回表。

  1. 索引设计与避坑指南

3.1 设计原则

三星索引标准:

一星:WHERE条件匹配索引列。

二星:ORDER BY/GROUP BY使用索引排序。

三星:SELECT字段全部在索引中。

选择性原则:

优先为区分度高的列建索引(如性别字段区分度低,手机号区分度高)。

计算公式:选择性 = 不同值数量 / 总行数。

3.2 常见陷阱

  1. 隐式类型转换

SELECT * FROM users WHERE phone = 13812345678; -- phone为varchar类型

导致索引失效,需强制转换:WHERE phone = '13812345678'。

  1. 函数操作破坏索引

SELECT * FROM orders WHERE DATE_FORMAT(create_time,'%Y-%m')='2025-03';

改写为范围查询:WHERE create_time >= '2025-03-01' AND create_time < '2025-04-01'。

  1. 进阶:索引的底层维护

4.1 页分裂与合并

插入触发页分裂:当叶子页已满时,分裂为两个页,父节点新增指针。

删除触发页合并:当页利用率低于阈值时,合并相邻页并更新指针。

4.2 索引统计信息

MySQL定期更新 INDEX_STATISTICS,优化器根据数据分布选择索引。

手动更新命令:ANALYZE TABLE patients;

相关推荐
思茂信息2 分钟前
CST电动车EMC仿真(二)——电机控制器MCU的EMC仿真
开发语言·javascript·单片机·嵌入式硬件·cst·电磁仿真
❀͜͡傀儡师8 分钟前
使用DelayQueue 分布式延时队列,干掉定时任务!
java·分布式·delayqueue·spingboot
失散1312 分钟前
分布式专题——55 ElasticSearch性能调优最佳实践
java·分布式·elasticsearch·架构
开始了码26 分钟前
关于qt运行程序点击几下未响应的原因
开发语言·qt
QT 小鲜肉27 分钟前
【QT/C++】Qt样式设置之CSS知识(系统性概括)
linux·开发语言·css·c++·笔记·qt
洛克希德马丁33 分钟前
Qt配置安卓开发环境
android·开发语言·qt
我要升天!34 分钟前
QT-- 理解项目文件
开发语言·数据库·qt
jonyleek35 分钟前
【JVS更新日志】低代码、APS排产、物联网、企业计划11.12更新说明!
java·物联网·低代码·前端框架·团队开发
冉冰学姐1 小时前
SSM基于WEB的教学质量评价系统的设计与实现p9ak6(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·ssm 框架·教学质量评价·多角色管理、
keke_俩个科1 小时前
实战派 JMeter 指南:核心功能、并发压测实操与常见问题解决方案
java·jmeter·spring·spring cloud·tomcat