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

复合索引设计指南:最左前缀 字段排座次

复合索引设计指南最左前缀 字段排座次昨天隔壁工位的老哥一脸懵圈地凑过来“兄弟我明明给表建了(a,b,c)的复合索引结果一查WHERE b1数据库直接给我上演‘全表扫描’索引是集体罢工了吗” 我深吸一口气“因为你没按套路出牌啊最左前缀原则了解一下”老哥“啥前缀我只听说过头发有前缀……” 行吧今天咱们就泡杯枸杞茶用最接地气的方式把复合索引那点事儿掰扯清楚✨ 复合索引结构“全家福” 复合索引结构示意索引 (a,b,c)a1b2c3→ 指针a1b2c5→ 指针a1b3c1→ 指针a2b1c4→ 指针a2b1c7→ 指针排序规则先按a排序a相同按b排序b相同按c排序一句话人话总结复合索引就像个“按顺序排队的班级”查人必须从队头最左边开始点名跳着点不好意思系统不认‍♂️ 最左前缀原则复合索引的“生死线”到底啥叫“最左前缀”别被这高大上的名字唬住了其实就是**“必须从左往右挨着来中间不能跳车”**假设你建了个(a,b,c)索引数据库查数据时是这么挑人的查询条件是否走索引内心OS说明WHERE a1✅用了第1列精准打击WHERE a1 AND b2✅用了前2列继续缩小包围圈。WHERE a1 AND b2 AND c3✅三列全包VIP通道全开WHERE b2❌没从第1列开始对不起不伺候。WHERE a1 AND c3⚠️只走a中间断了c只能靠边站。‍♂️WHERE b2 AND c3❌队头都没定直接全表扫描吧。 最左前缀匹配规则索引: (a,b,c)WHERE a1✅ 走索引WHERE a1 AND b2✅ 走索引WHERE b2❌ 不走索引WHERE a1 AND c3⚠️ 只走a核心规则必须从最左边的列开始中间不能跳过为啥非得这么死板因为底层 B 树索引存数据的时候是按(a,b,c)的顺序“叠罗汉”排好的先按a站队a一样的再按b排b一样的最后按c分。你不给a的值就像去图书馆找书只说了“第二排第三个”管理员内心OS“第一排都没定我上哪儿给你找” 所以没a打头阵后面全是瞎找 索引字段顺序咋安排“黄金C位”争夺战给复合索引排座次可不是闭着眼睛瞎填这可是有“潜规则”的记住这三句口诀1️⃣等值查询的列必须坐前排精准打击一步到位2️⃣区分度高的列抢C位人多势众的先上过滤效率高3️⃣范围查询的列乖乖靠后站范围一开后面的兄弟全瞎举个实战栗子咱们有个订单表orders长这样CREATETABLEorders(user_idINT,-- 用户IDstatusVARCHAR(20),-- 订单状态pending/paid/shippedcreate_timeDATETIME,-- 创建时间amountDECIMAL(10,2));平时最常查的是啥肯定是这货SELECT*FROMordersWHEREuser_id100ANDstatuspaidANDcreate_time2024-01-01;索引该怎么建来跟着流程图走一波 字段顺序决策user_id100statuspaiduser_id 高status 低create_time xxx确定查询条件等值查询?区分度高?第1位: user_id第2位: status范围查询?第3位: create_time范围放最后索引: (user_id, status, create_time)最终答案(user_id, status, create_time)为啥这么排咱们拆开揉碎了看字段查询姿势坐次内心OS排座理由user_id精确等值第1位区分度超高一查直接筛掉99%的吃瓜群众必须站C位status精确等值第2位继续精准过滤把范围缩小到“已付款”的那拨人。create_time范围查询()第3位范围查询是“路霸”它一出场后面的路就断了只能委屈放最后。️⚠️ 高能预警范围查询是个“路霸”敲黑板了范围查询比如,,BETWEEN,LIKE xx%在复合索引里就是个“断点续传”的终结者。一旦它登场它后面的字段索引直接“罢工”-- 索引: (a,b,c)-- ✅ 情况1全是等值一路绿灯WHEREa1ANDb2ANDc3-- 三列全部享受VIP通道-- ⚠️ 情况2等值范围等值半路翻车WHEREa1ANDb10ANDc3-- 只走a和bc直接靠边站为啥c不走了因为b10找到一堆数据后这些数据的c值是乱序的数据库一看“这c也没排好队啊没法二分查找了”干脆直接放弃索引自己硬翻。怎么破局如果c的过滤效果特别好别硬刚试试这两招拆分成俩索引INDEX idx_ab (a,b)和INDEX idx_ac (a,c)让数据库自己挑最顺手的用。搞个覆盖索引INDEX idx_abc (a,b,c, 其他查询需要的列)数据直接在索引里拿齐连回表找数据的“跑腿费”都省了‍♂️️ 那些年我们踩过的“索引玄学”坑疑问1SQL里写的条件顺序必须跟索引顺序一模一样吗答完全不用‍♀️ 优化器是个“端水大师”你写WHERE b2 AND a1它会在后台偷偷帮你调换顺序只要索引有(a,b)照样嗖嗖走索引疑问2ORDER BY 怎么影响索引答如果索引是(a,b)ORDER BY a,b→ ✅ 舒服索引天生排好序了直接顺着拿。ORDER BY b,a→ ❌ 痛苦顺序反了数据库只能含泪启动filesort临时排序CPU风扇狂转️疑问3GROUP BY 也能蹭索引答必须的GROUP BY a,b跟ORDER BY a,b一个道理自带分组排序光环效率杠杠的✨ 终极口诀建议背诵全文设计复合索引记住这**“三步走”**战略1️⃣抓等值全放最前面区分度高的当“班长”带队‍2️⃣排范围等值搞定后再放范围查询别让路霸提前封路。3️⃣想覆盖把SELECT的字段也塞进索引彻底告别“回表”跑腿一气呵成千万别踩的雷区❌ 把范围查询放前排直接废掉后半截索引❌ 让低区分度字段站C位比如“性别”只有男女放第一列纯属浪费索引空间❌ 建了索引却不从左开始查相当于买了VIP年卡非从侧门翻墙进去‍♂️互动时间到各位大佬在设计复合索引时是“最左前缀”的忠实信徒还是经常在“范围查询”的坑里仰卧起坐‍♂️或者遇到过“明明建了索引优化器却装瞎”的玄学事件 评论区敞开聊你的每一个血泪史都是大家避坑的指南针 觉得这篇没让你掉头发点个赞 收藏❤️就是对我最大的回血包下期想听啥覆盖索引的黑魔法索引下推的骚操作留言点名马上安排防杠声明技术细节基于 MySQL 5.7.40 / 8.0.35 实测生产环境千变万化请以你的实际版本压测结果为准别盲目照抄小心翻车哦延伸阅读补给站《MySQL技术内幕InnoDB存储引擎》、MySQL官方文档、Percona Blog硬核玩家必备

相关文章:

复合索引设计指南:最左前缀 字段排座次

🍵 复合索引设计指南:最左前缀 & 字段排座次 昨天隔壁工位的老哥一脸懵圈地凑过来:“兄弟,我明明给表建了 (a,b,c) 的复合索引,结果一查 WHERE b1,数据库直接给我上演‘全表扫描’,索引是集…...

ClawX:OpenClaw AI智能体桌面门户,图形化编排与自动化实战

1. 项目概述:ClawX,为OpenClaw AI智能体打造的桌面门户如果你和我一样,对AI智能体(AI Agent)的潜力感到兴奋,却又对在终端里敲打复杂的命令行、配置繁琐的YAML文件感到头疼,那么ClawX的出现&…...

OpenClaw Windows11 保姆级安装部署教程(专属优化、一次成功)

OpenClaw Windows11 保姆级安装部署教程(专属优化、一次成功)一、前言OpenClaw(圈内俗称「小龙虾」)是 GitHub 星标 28W 的开源本地 AI 智能体,主打全自动电脑操控能力,支持自动操作电脑、整理文件、浏览器…...

淘宝淘金币自动化脚本终极指南:每天节省20分钟的完整解决方案

淘宝淘金币自动化脚本终极指南:每天节省20分钟的完整解决方案 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi …...

AI写专著全攻略:从构思到完稿,快速生成20万字专著

学术专著写作困境与AI工具解决方案 学术专著的生命力源于其逻辑的严谨性,但在写作过程中,逻辑论证往往是最容易出现问题的部分。专著的写作必须围绕核心观点展开系统的论证,要不仅深入阐述每一个论点,还需要应对来自不同学派的争…...

华为OD新系统机试真题 2026.5.10 - 美观的灯笼

美观的灯笼(Py/Java/C/C/Js/Go)题解 华为OD新系统机试真题 华为OD新系统上机考试真题 5月10号 100分题型 华为OD新系统机试真题目录点击查看: 华为OD新系统机试真题题库目录|机考题库 算法考点详解 题目描述 春节将至,工人要在古镇老街挂灯笼。街上有…...

FastAPI新手快速入门

一、认识FastAPI1.什么是apiapi接口其实就是应用程序器对外提供操作数据的入口,这个入口可以是函数、方法或者url接口当客户端调用入口,应用程序会执行对应代码操作,完成相对应的功能(应用服务器只负责对外提供统一API&#xff0c…...

SQL线索

插入insert into 表 (列) value (),(),...;从另一个表插入数据:insert into 表 (列) select 列 from 另一个表 where 限制;删除delete from 表 where 限制;子查询删:delete from 表 where 列 in (select 列 from 另一个表 where 限制);改update 表 set 列…...

宝塔面板登录教程

1买个服务器2连接ssh-宝塔或者xshell都行3在xshell下载宝塔面板4在服务器主页--在哪里订购的就在有个管理点进去-加入安全组或者添加nat转发。如果不行用bt命令重置端口号再访问,最后重置之后重启一下-bt 15使用nat转发的要用外网端口,宝塔显示的是内网的…...

HMCL启动器社区参与指南:从新手到核心贡献者的完整路径

HMCL启动器社区参与指南:从新手到核心贡献者的完整路径 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL 你是否曾经遇到过游戏启动问题却不知向谁求助…...

如何在老旧电视上实现流畅的1080P直播?MyTV-Android原生应用深度解析

如何在老旧电视上实现流畅的1080P直播?MyTV-Android原生应用深度解析 【免费下载链接】mytv-android 使用Android原生开发的视频播放软件 项目地址: https://gitcode.com/gh_mirrors/my/mytv-android 你是否曾为家中老旧智能电视的卡顿直播体验而烦恼&#x…...

OpenCode 的工具体系:给大模型装上操控代码库的“手”与“眼

要在代码库里真正帮上忙,光有聪明的脑子还不够,大语言模型(LLM)还需要能够执行具体操作的“工具”。OpenCode 把这些工具视为模型与项目环境之间的纽带——读取文件、修改代码、运行命令、查文档,甚至主动上网搜索&…...

ARM TRCCNTCTLR寄存器详解与调试技巧

1. ARM Trace Counter控制寄存器TRCCNTCTLR深度解析在嵌入式系统调试和性能分析领域,硬件计数器是不可或缺的关键工具。作为ARM架构调试系统的重要组成部分,Trace Counter Control Register(TRCCNTCTLR)系列寄存器为开发者提供了精…...

JSCJ-ELEC长电长晶原厂一级代理分销经销

JSCJ-ELEC长晶长电原厂一级代理分销经销 品牌 元件类别 型号 描述 包装 数量 CJ 二极管 RB160M-30 SOD-123 3000 45,000...

C#循环入门指南:从0到1掌握循环逻辑

一、for循环:已知循环次数,首选它for循环是最常用、最规范的循环,适合已知循环次数的场景(比如打印10遍文字、计算1到100的和)。它的结构很固定,就像一个“固定流程的重复机器”,一步都不会乱。…...

【大模型服务治理实战指南】:奇点智能大会首发的7大避坑法则与3套可落地架构模板

更多请点击: https://intelliparadigm.com 第一章:大模型服务治理:奇点智能大会 在2024年奇点智能大会上,大模型服务治理成为核心议题。随着LLM推理服务规模化部署,企业面临模型版本混乱、流量调度失衡、资源隔离缺失…...

专业指南:如何用Legacy-iOS-Kit一站式管理老旧苹果设备

专业指南:如何用Legacy-iOS-Kit一站式管理老旧苹果设备 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...

SMU5.4-5.10补题

牛客Round142 A-E题vj A,B,C,D,F...

QMCDecode:解锁QQ音乐加密文件,三步实现音乐格式自由转换

QMCDecode:解锁QQ音乐加密文件,三步实现音乐格式自由转换 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录&am…...

英雄联盟智能辅助工具Seraphine:三步快速上手的终极指南

英雄联盟智能辅助工具Seraphine:三步快速上手的终极指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 你是否厌倦了在英雄联盟排位赛中手忙脚乱地查询对手战绩?是否希望有一个智能助…...

Spring MVC 的核心知识点梳理

MVC 是什么 MVC 不是 Spring 发明的,而是一种设计模式,目的是“解耦”。 M(Model,模型):数据 业务逻辑。比如 Teacher 类,TeacherService。V(View,视图)&…...

IP第一次作业

...

HCIA前三章综合实验报告

实验要求按照图示配置IP地址完成路由器之间的协议配置构建需求的环境,配置MGRE,GRE测试全网通实验配置(1)配置IP地址[R1-GigabitEthernet0/0/0]ip address 192.168.1.2 24[R1-Serial4/0/0]ip address 15.1.1.1 24[R2-GigabitEther…...

如何让Windows任务栏变透明:TranslucentTB终极美化指南

如何让Windows任务栏变透明:TranslucentTB终极美化指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想让你的Windows桌面焕…...

微信网页版终极解决方案:三步实现浏览器端微信完整使用指南

微信网页版终极解决方案:三步实现浏览器端微信完整使用指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为繁琐的微信安装流程而烦…...

Android虚拟定位终极指南:无需Root的应用级位置伪装解决方案

Android虚拟定位终极指南:无需Root的应用级位置伪装解决方案 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否遇到过这样的困扰:想在游戏中签到获取限…...

GetQzonehistory:三步轻松备份QQ空间历史说说,永久保存青春记忆

GetQzonehistory:三步轻松备份QQ空间历史说说,永久保存青春记忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间里的青春记忆会随着时间流逝而消…...

SpringBoot项目里用Sharding-JDBC做分库分表,这5个配置项最容易踩坑

SpringBoot整合Sharding-JDBC分库分表:五大高频配置陷阱与实战解决方案 当数据库单表数据量突破千万级大关时,分库分表几乎是每个Java开发者必须面对的课题。作为Apache ShardingSphere的核心模块,Sharding-JDBC以其轻量级、低侵入的特性成为…...

FGA自动化助手:告别FGO重复刷本,每天节省3小时游戏时间

FGA自动化助手:告别FGO重复刷本,每天节省3小时游戏时间 【免费下载链接】FGA Auto-battle app for F/GO Android 项目地址: https://gitcode.com/gh_mirrors/fg/FGA 你是否厌倦了在《命运/冠位指定》(FGO)中重复点击刷素材…...

Hotkey Detective:Windows热键冲突终极解决方案与实战指南

Hotkey Detective:Windows热键冲突终极解决方案与实战指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...