mysql like也是b+Tree索引吗

发布时间:2026/8/25 12:05:07

mysql like也是b+Tree索引吗
like也是bTree索引吗一、直接回答是的当 LIKE 查询能用到索引时用的就是 BTree 索引因为 MySQL 中默认的索引结构就是 BTree。但关键在于BTree 的有序性决定了什么样的 LIKE 查询能用索引。二、BTree 为什么支持 LIKE ‘abc%’1. BTree 的有序特性-- 假设 name 列的值有张三、李四、王五、张伟、张强-- 在 BTree 中存储顺序是李四,王五,张三,张伟,张强-- 按字符串排序-- BTree 结构示意[王五]/\[李四][张...]/\[张三][张伟,张强]2. 前缀匹配的执行过程-- 查询WHERE name LIKE 张%EXPLAINSELECT*FROMusersWHEREnameLIKE张%;-- BTree 执行步骤-- 1. 在索引树中找到第一个以张开头的值定位到张三-- 2. 顺序扫描直到遇到不是以张开头的值-- 3. 这个过程利用了 BTree 叶子节点的链表结构-- 相当于执行了SELECT*FROMusersWHEREname张ANDname郑-- 郑是张的下一个首字三、BTree 为什么不支持 LIKE ‘%abc’1. 有序性的限制-- 查询WHERE name LIKE %三-- 原因BTree 索引是基于完整字符串排序的-- 无法通过索引直接找到以三结尾的记录-- 索引中的值李四, 王五, 张三, 张伟, 张强-- ↑ ↑-- 找不到以三结尾的起点 也不知道终点-- 只能全表扫描2. 可以这样理解-- BTree 索引就像电话簿按姓氏排序-- ✅ 快速找到所有姓张的人前缀匹配-- ❌ 无法快速找到名字叫三的人后缀匹配四、BTree 索引在 LIKE 中的实际工作方式1. 索引条件下推ICP-- MySQL 5.6 引入的优化CREATEINDEXidx_name_ageONusers(name,age);-- 查询SELECT*FROMusersWHEREnameLIKE张%ANDage20;-- 执行过程Without ICP-- 1. 用索引找到所有以张开头的记录10万条-- 2. 回表读取完整数据-- 3. 在 server 层过滤 age 20-- 执行过程With ICP-- 1. 用索引找到以张开头的记录-- 2. 在存储引擎层直接用索引中的 age 字段过滤-- 3. 只对过滤后的少量记录回表2. 索引覆盖扫描-- 创建覆盖索引CREATEINDEXidx_nameONusers(name,email);-- 查询只返回索引中的字段SELECTname,emailFROMusersWHEREnameLIKE张%;-- Extra: Using index不需要回表-- 因为查询的所有字段都在索引中五、BTree 索引在 LIKE 中的性能分析1. 不同情况下的扫描范围-- 数据分布100万条记录-- 假设姓张的有 1万条-- 情况1LIKE 张%-- 索引扫描范围从第一个张到最后一个张-- 扫描记录数约 1万条-- 性能很快-- 情况2LIKE 张三%-- 索引扫描范围从第一个张三到最后一个张三-- 扫描记录数可能只有几百条-- 性能更快-- 情况3LIKE %三-- 索引扫描范围整个索引100万条-- 但 BTree 扫描整个索引也很慢还不如全表2. 范围估算-- 查看索引统计信息SHOWINDEXFROMusers;-- Cardinality 字段表示区分度-- 估算匹配行数EXPLAINSELECT*FROMusersWHEREnameLIKE张%;-- rows 字段会显示预估的扫描行数六、BTree 索引的局限性和弥补方案1. 局限性-- BTree 无法优化的场景SELECT*FROMarticlesWHEREcontentLIKE%数据库%;SELECT*FROMproductsWHEREdescriptionLIKE%手机%;SELECT*FROMlogsWHEREmessageLIKE%ERROR%;2. 弥补方案-- 方案1全文索引内部用倒排索引不是 BTreeALTERTABLEarticlesADDFULLTEXT(content);SELECT*FROMarticlesWHEREMATCH(content)AGAINST(数据库);-- 方案2搜索引擎ElasticSearch-- 使用倒排索引专门优化全文搜索-- 方案3反向字段索引用 BTree 间接实现ALTERTABLEusersADDreverse_emailVARCHAR(255)GENERATED ALWAYSAS(REVERSE(email))STORED;CREATEINDEXidx_reverse_emailONusers(reverse_email);-- 现在可以查后缀WHERE reverse_email LIKE REVERSE()七、BTree 索引在不同 LIKE 模式下的表现LIKE 模式BTree 使用情况扫描方式效率‘abc%’✅ 使用索引范围扫描高‘a%c’✅ 使用索引范围扫描 过滤中高‘a_c’✅ 使用索引范围扫描 过滤中‘%abc’❌ 不使用全表扫描低‘%abc%’❌ 不使用全表扫描极低‘_abc’❌ 不使用全表扫描低八、总结BTree 索引在 LIKE 中的工作原理利用有序性通过 BTree 的树状结构快速定位起点利用链表通过叶子节点的链表顺序扫描利用 ICP在索引层面过滤减少回表利用覆盖索引避免回表关键结论LIKE ‘abc%’ 能用 BTree 索引利用前缀有序性LIKE ‘%abc’ 不能用 BTree 索引后缀无序BTree 不是万能的需要其他技术全文索引、ES弥补一句话理解BTree 索引就像一本按拼音排序的字典可以快速找到以某个拼音开头的所有字但没法找到以某个拼音结尾的字。

相关新闻

JavaScript常见的内存泄露问题 - JavaScript学习系列文章

JavaScript常见的内存泄露问题 - JavaScript学习系列文章

2026/8/25 11:55:06

多前端同学可能觉得这是浏览器或引擎该操心的事, 但理解内存管理能帮你写出更高效的代码, 还能避免各种内存泄漏的坑. 一、常见的内存泄露场景 1) 意外的全局变量: function leaky() { leak 这是一个全局变量; // 本意是 let leak ... this.anotherLeak 这也是全局的; …

JavaScript对象与元编程 - JavaScript学习系列文章

JavaScript对象与元编程 - JavaScript学习系列文章

2026/8/25 11:55:06

一、属性描述符 当你写 obj.name张三 时, 你真的了解这个 name 属性吗? 其实每个属性背后都藏着一组"属性描述符"(Property Descriptor), 就像一个人的身份证信息一样记录着这个属性的详细特征. const obj { name: 张三 };const descriptor Object.getOwnPropert…

JavaScript异步编程的演进 - JavaScript学习系列文章

JavaScript异步编程的演进 - JavaScript学习系列文章

2026/8/25 11:55:06

一、 为什么需要异步编程? 先说说为什么要有异步这回事. JavaScript是单线程的, 也就是说它一次只能做一件事. 如果所有操作都同步执行, 遇到网络请求或者文件读取这种耗时的操作, 页面就会卡住不动, 用户体验直接爆炸. // 同步代码的灾难现场const data fetchDat…

GNSS高级篇- 04 信号体制:4.1 各系统信号特征剖析

GNSS高级篇- 04 信号体制:4.1 各系统信号特征剖析

2026/8/25 12:55:09

GNSS 高级篇 4 信号体制 4.1 各系统信号特征剖析 如果说卫星轨道是 GNSS 的"骨架",原子钟是 GNSS 的"心脏",那信号体制就是 GNSS 的"语言"——卫星用这种语言向地面广播自己的位置和时间,接收机则要听懂这种语…

Havenlon 执行控制工程 II 04|时间为什么本身就是一种安全边界?

Havenlon 执行控制工程 II 04|时间为什么本身就是一种安全边界?

2026/8/25 12:55:09

验证一项操作时,系统通常会检查身份是否有效、签名是否正确、审批是否存在、规则是否放行、设备状态是否正常。这些检查有一个共同点:它们看起来都在验证一组事实。而真正进入执行系统之后,几乎所有事实都需要再加一个维度——时间。因为一项…

2026年7月承德市新房价格深度分析报告

2026年7月承德市新房价格深度分析报告

2026/8/25 12:55:09

一、报告背景与数据说明本报告基于2026年7月承德市新房实际成交案例,结合区域分布、楼盘定位、户型结构与成交价格等多维度数据,对当前承德市新房市场进行深度分析。报告旨在为购房者、投资者及行业从业者提供真实、客观的市场参考。数据来源说明&#x…

2026年7月沧州市新房价格深度分析报告

2026年7月沧州市新房价格深度分析报告

2026/8/25 12:55:09

一、报告背景与数据说明本报告基于2026年7月沧州市新房市场实际成交案例,结合成交价格、成交面积、成交区位等多维度数据,对当前沧州市新房价格走势进行深度分析。报告数据来源于公开成交备案信息及市场调研,覆盖运河区、新华区、沧县、黄骅、…

MongoDB实战:Go操作MongoDB

MongoDB实战:Go操作MongoDB

2026/8/25 12:55:09

TL;DR 核心要点速览 GORM是Go最流行的ORM框架 Redis缓存策略:穿透用布隆过滤器,击穿用互斥锁 go-redis/v9支持连接池和管道 Go操作MongoDB用official driver 数据库迁移用goose或migrate工具 本篇是Go数据层模块,含缓存策略实战 摘要:本文详细介绍Go操作MongoDB,涵盖核心原理、…

并发安全的数据结构设计

并发安全的数据结构设计

2026/8/25 12:45:09

TL;DR 核心要点速览 无缓冲channel发送和接收必须同步,否则死锁 有缓冲channel缓冲区未满时发送不阻塞 goroutine初始栈2KB,比线程轻100倍 GMP调度器P数量默认等于CPU核数 sync.Mutex保护共享状态,channel用于通信 本篇是Go并发编程模块,含实战代码 摘要:并发安全数据结构设计…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/24 19:53:32

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/24 19:56:07

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/24 21:16:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南

2026/8/25 0:04:34

三步把QQ空间历史说说导出到本地:GetQzonehistory 极简指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory Meta Description:GetQzonehistory 是一个QQ空间历史说…

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

2026/8/25 0:04:35

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

2026/8/25 0:04:35

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…