mysql索引底层B+树

B+树胜出的关键特性:

矮胖树结构:3-4层高度即可存储2000万条记录(假设每页存1000条)
叶子链表:所有数据存储在叶子节点,并通过双向链表连接
非叶导航:非叶子节点仅存储键值,不保存数据,提升节点容量
2. 实战案例:索引如何加速查询?
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='心血管科';  
若索引包含所有查询字段,直接返回索引数据,无需回表。
3. 索引设计与避坑指南
3.1 设计原则
三星索引标准:

一星:WHERE条件匹配索引列。
二星:ORDER BY/GROUP BY使用索引排序。
三星:SELECT字段全部在索引中。
选择性原则:

优先为区分度高的列建索引(如性别字段区分度低,手机号区分度高)。
计算公式:选择性 = 不同值数量 / 总行数。
3.2 常见陷阱
1. 隐式类型转换
SELECT * FROM users WHERE phone = 13812345678; -- phone为varchar类型  
导致索引失效,需强制转换:WHERE phone = '13812345678'。
2. 函数操作破坏索引
SELECT * FROM orders WHERE DATE_FORMAT(create_time,'%Y-%m')='2025-03';  
改写为范围查询:WHERE create_time >= '2025-03-01' AND create_time < '2025-04-01'。
4. 进阶:索引的底层维护
4.1 页分裂与合并
插入触发页分裂:当叶子页已满时,分裂为两个页,父节点新增指针。
删除触发页合并:当页利用率低于阈值时,合并相邻页并更新指针。
4.2 索引统计信息
MySQL定期更新 INDEX_STATISTICS,优化器根据数据分布选择索引。
手动更新命令:ANALYZE TABLE patients;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/92688.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI开放课堂:钉钉MCP开发实战

我们正处在AI技术爆发的时代&#xff0c;也处于企业数字化蓬勃发展的时代。如何利用AI技术&#xff0c;突破模型自身知识的局限&#xff0c;安全、高效地与外部世界连接和交互&#xff0c;是当前所有AI开发者在企业数字化中面临的问题之一。 MCP&#xff08;Model Context Prot…

DigitalOcean 一键模型部署,新增支持百度开源大模型ERNIE 4.5 21B

使用过DigitalOcean GPU Droplet 服务器的用户应该对我们的一键模型部署功能不陌生。DigitalOcean 的一键模型部署 (1-Click Models) 功能是 DO 为开发者和企业提供的一种便捷方式&#xff0c;用于快速部署和运行预训练的生成式 AI 模型&#xff0c;尤其是大型语言模型 (LLM)。…

【嵌入式面试】嵌入式笔试与面试宝典(offer必来)

&#x1f48c; 所属专栏&#xff1a;【嵌入式面试】 &#x1f600; 作  者&#xff1a;兰舟比特 &#x1f43e; &#x1f680; 个人简介&#xff1a;热爱开源系统与嵌入式技术&#xff0c;专注 Linux、网络通信、编程技巧、面试总结与软件工具分享&#xff0c;持续输出实用干…

企业级数据分析创新实战:基于表格交互与智能分析的双引擎架构

引言&#xff1a;数字化转型中数据协同困境与系统融合挑战 在数字化转型实践中&#xff0c;企业普遍面临数据系统与业务运营的协同困境&#xff0c;主要表现为数据处理平台与核心业务流程的架构隔离、分析成果与决策闭环的价值断层、以及双重数据维护带来的资源损耗。这种系统…

openbmc 日志系统继续分析

1.说明 1.1 总体说明 本节是继: https://blog.csdn.net/wit_yuan/article/details/147142407?spm=1011.2415.3001.5331 后的继续分析的文档。 该篇内容主要目的是分析整个openbmc的日志系统。 注意解读文档: https://github.com/openbmc/docs/blob/master/designs/event-l…

【JIRA小白如何使用它进行bug管理】

JIRA小白如何使用它进行bug管理 提示&#xff1a;入职一般来说&#xff0c;公司会提供账号&#xff0c;不需要部署如何提bug&#xff1a; JIRA有两种提交方式 在执行测试用例中在bug管理项目中新建提bug建议或者注意事项&#xff1a; 标题&#xff1a;执行完A之后&#xff0c;发…

陪诊小程序系统开发:开启医疗陪护新时代

在快节奏的现代生活中&#xff0c;人们面临着各种各样的压力&#xff0c;健康问题也日益凸显。当生病就医时&#xff0c;尤其是对于老年人、孕妇、残障人士等特殊群体&#xff0c;独自前往医院往往会遇到诸多困难&#xff0c;如不熟悉医院流程、行动不便、心理上感到孤独无助等…

Leetcode—1035. 不相交的线【中等】

2025每日刷题&#xff08;214&#xff09; Leetcode—1035. 不相交的线最长公共子序列长度&#xff08;Longest Common Subsequence&#xff0c;LCS&#xff09; 给定两个序列&#xff08;如字符串或数组&#xff09;&#xff0c;最长公共子序列&#xff08;LCS&#xff09;是同…

使用 Conda 工具链创建 UV 本地虚拟环境全记录——基于《Python 多版本与开发环境治理架构设计》

Python 多版本环境治理理念驱动的系统架构设计&#xff1a;三维治理、四级隔离、五项自治 原则-CSDN博客 Python 多版本与开发环境治理架构设计-CSDN博客 【终极实战】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具协同 AnacondaPyCharm&#xff1a;构建 Python 全版本栈隔离…

一文通透mamba2「力证Transformer are SSM」:从SSM、半可分矩阵、SMA、SSD到mamba2

前言 实话说&#xff0c;过去一两月一直忙着我司两大类项目的推进 一类是正在逐一上线基于大模型的论文翻译、论文审稿、论文对话、论文修订/润色、论文idea提炼等等(截止到24年8月底&#xff0c;其中的审稿和翻译已上线七月官网 )一类是正在抓紧做面向一个个工厂的具身智能机…

【Java基础06】ArrayList

文章目录1.ArrayList1.1 集合的基本使用1.2 集合的创建和成员方法1.3 练习一&#xff1a;集合的遍历基本数据类型对应的包装类1.4 练习二&#xff1a;使用集合存储并遍历学生对象1.4 练习三&#xff1a;添加用户对象并判断是否存在写方法要思考的步骤1.5 练习四&#xff1a;添加…

ddos 放在多个云主机,同时运行

1. 起因&#xff0c; 目的: 我打开 grok, 被 cloudflare 拦截&#xff0c;问我是不是机器人。 这个情况&#xff0c;如果是别的小网站也就算了&#xff0c;很正常。 大公司也搞这种东西&#xff0c;要么是偷懒&#xff0c;要么是太小气了。 一气之下&#xff0c;我决定写个 ddo…

lspci/setpci用法小结

目录 1.lspci用法小结 2.lspci -t 3.setpci用法小结 1.lspci用法小结 参考博客&#xff1a;【PCIe】lspci用法小结 - 知乎 lspci是一个用来显示系统中所有PCI总线设备或者连接到该总线上所有设备的工具 man lspci lspci(8) …

光通信从入门到精通:PDH→DWDM→OTN 的超详细演进笔记

光通信从入门到精通&#xff1a;PDH→DWDM→OTN 的超详细演进笔记 作者&#xff1a; 脱脱克克 日期&#xff1a;2025-07-24 关键词&#xff1a;DWDM、OTN、G.709、光纤、带宽、C-band、L-band、DSP、ROADM 摘要 本文用一条“高速公路”的比喻&#xff0c;把 40 年光传输技术演进…

安全初级——网页

网页代码<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用户登录</title><script src&…

JVM原理及其机制(二)

目录 一 . 垃圾回收机制&#xff08;GC&#xff09; 二 . 垃圾回收的具体步骤 &#xff08;1&#xff09;先找出谁是垃圾 方案一&#xff1a;引用计数 方案二&#xff1a;可达性分析 &#xff08;2&#xff09;释放垃圾的内存空间 方案一&#xff1a;标记清除 方案二…

Solo:基于 zkHE 的身份验证协议,构建 Web3 可信匿名身份层

“Solo 正在基于其独创的 zkHE 架构&#xff0c;构建一套“可信匿名”的链上身份系统&#xff0c;有望打破长期困扰 Web3 的“不可能三角”&#xff0c;即在隐私保护、身份唯一性与去中心化可验证性之间实现兼得。”前不久&#xff0c;Web3 身份层项目 Solo 宣布完成 120 万美元…

【Excel函数】将数据非空的字段筛选出来放在新列

一、需求描述 将对应数据不为空的字段筛选出来放在新的列里 二、解析 IFERROR(INDEX(B$2:B$10,SMALL(IF(C$2:C$10<>"",ROW(C$2:C$10)-ROW(C$2)1),ROW(A1))),"") 1. IF(C$2:C$10<>"", ROW(C$2:C$10)-ROW(C$2)1) 作用&#xff1a;…

【unity游戏开发入门到精通——组件篇】unity的粒子系统力场 (Particle System Force Field)实现如旋风、吸引力、风吹效果等

文章目录前言一、参数介绍二、Particle System Force Field 的核心特性三、如何使用1、粒子系统开启外力选项2、然后再添加粒子系统力场 (Particle System Force Field)即可参考专栏推荐完结前言 Unity的粒子系统是一个非常强大的工具&#xff0c;可以用来创建各种动态效果&am…

JS逆向基础( AES 解密密文WordArray和Uint8Array实战②)

1. Uint8Array 就像「快递柜」 每个格子固定放「1 瓶饮料」(1 字节 = 8 位,范围 0-255 就像饮料编号) 比如装了 3 瓶:可乐(编号 255)、雪碧(10)、矿泉水(0) 这是超市通用的标准货架,任何工具(JS 内置功能)都认识这种摆放方式 用途:运输、存储所有二进制东西(图片…