当前位置: 首页 > news >正文

MySQL索引结构:B树与B+树

MySQL索引结构:B树与B+树

B树和B+树是MySQL索引的底层数据结构,但实际实现中InnoDB引擎默认使用B+树。

B树特点

  • 每个节点存储键值和数据,可能导致非叶子节点数据占用空间大。
  • 所有节点都可能包含数据,查询效率不稳定。

B+树特点

  • 非叶子节点仅存储键值(索引),数据全部存储在叶子节点。
  • 叶子节点通过指针连接,支持高效的范围查询。
  • 更矮的树高,减少磁盘I/O次数。

聚集索引与非聚集索引

聚集索引

  • 叶子节点直接存储行数据,表数据按索引顺序物理排序。
  • InnoDB中主键默认为聚集索引,若未定义主键,则选择第一个唯一非空索引替代。

非聚集索引(二级索引)

  • 叶子节点存储主键值而非行数据,查询需回表(通过主键二次查找)。
  • 一个表可有多个非聚集索引。

示例代码

创建表并定义索引
-- 创建包含聚集索引(主键)和非聚集索引的表
CREATE TABLE employees (id INT PRIMARY KEY,               -- 聚集索引name VARCHAR(50),age INT,department VARCHAR(50),INDEX idx_name_age (name, age),   -- 非聚集索引(复合索引)INDEX idx_department (department) -- 非聚集索引
) ENGINE=InnoDB;
插入测试数据
INSERT INTO employees VALUES 
(1, 'Alice', 28, 'HR'),
(2, 'Bob', 32, 'Engineering'),
(3, 'Charlie', 25, 'Marketing');
查询示例
-- 使用聚集索引(主键)查询
SELECT * FROM employees WHERE id = 2;-- 使用非聚集索引查询(需回表)
EXPLAIN SELECT * FROM employees WHERE name = 'Alice';-- 覆盖索引优化(避免回表)
EXPLAIN SELECT name, age FROM employees WHERE name = 'Alice';
索引使用分析
-- 查看索引使用情况
SHOW INDEX FROM employees;-- 查询优化器分析
EXPLAIN SELECT * FROM employees WHERE department = 'Engineering';

关键注意事项

  • 聚集索引的列选择应避免频繁更新,否则可能导致页分裂影响性能。
  • 复合索引需遵循最左前缀原则,例如idx_name_age索引对WHERE name='Alice'有效,但对WHERE age=25无效。
  • 使用EXPLAIN分析查询计划,确认是否命中索引。

通过合理设计索引结构(如B+树特性)和索引类型(聚集/非聚集),可显著提升MySQL查询效率。

http://www.dtcms.com/a/481842.html

相关文章:

  • 进程的基本认识
  • Webpack 打包优化与骨架屏结合:双管齐下提升前端性能与用户体验
  • 鸿蒙:在沙箱目录下压缩或解压文件
  • 智能SQL客户端Chat2DB技术解析
  • 电影网站推广什么是网络营销的主要职能之一
  • Transformers库用法示例:解锁预训练模型的强大能力
  • 大气污染扩散calpuff模型:数据预处理、Calmet气象模块、Post Tools 后处理工具及绘图工具
  • 用气安全与能效优化平台
  • 02117 信息组织【第三章】
  • 自己建设淘宝客网站需要备案么wordpress插件 投票
  • Wireshark 4.4.9 设置为中文界面方法
  • 极限AI Coding,腾讯云“黑客松”大赛回顾(内有作品开源)
  • 【工具分享】Dota游戏平台助手
  • 网站制作找云优化口碑好的网站定制公司
  • 精品建站公司2345网址大全下载到桌面
  • HENGSHI SENSE异构过滤架构:基于三层执行引擎的跨源联邦查询性能优化实践
  • 语言模型监督式微调(SFT)概述
  • 又开始了 小程序定制
  • 前端面试-箭头函数
  • 翻译类公司网站模板node做网站后台
  • 2018做网站哪里可以做寄生虫网站
  • 腾讯云的游戏盾怎么样
  • C++函数完全指南:从基础到高级应用
  • 国自然申报·医工交叉热点|单细胞多模态融合破解病理研究痛点
  • html情人节给女朋友做网站WordPress在手机能更新
  • springboot餐厅信息管理系统设计(代码+数据库+LW)
  • Jenkins Share Library教程 —— 高级实战与最佳实践教程
  • Blender图片AI智能一键生成3D模型插件 Pixelmodeller Ai V1.4.9
  • CAA机器学习
  • LeetCode hot100:128 最长连续序列:高效求解