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

联合索引是按顺序排好序的

用最简单、最形象、最不绕弯的方式给你讲懂!
你现在卡住的点,90%的人都在这里懵,我一句话先点破:

超级核心结论(你必须先记住)

**联合索引是按顺序排好序的:
只有前面字段完全确定(=),后面字段才是有序的
一旦前面出现范围(> <),后面字段立刻乱序 → 索引失效!


我给你用【字典法】讲,你瞬间就懂!

联合索引(a,b,c)排序规则:

先按 a 排序 → 再按 b 排序 → 再按 c 排序

只有前面是“=”,后面才是排好序的!


情况1:你能懂的

a=1 and b=2 and c>3
索引结构是这样排好序的:

a=1固定 b=2固定 c=3 ✔ c=4 ✔ c=5 ✔

因为a 固定、b 固定
所以c 是排好序的
所以c>3 可以用索引!


情况2:你现在不懂的(重点来了!)

a=1 and b>2 and c in (1,2)

索引结构是这样的:

a=1固定 b=3 → c 排序是:1,2,4,5 b=4 → c 排序是:2,1,5,3 b=5 → c 排序是:5,2,1,4

重点来了:
b 是范围(>2)→ b 有很多值(3、4、5…)
每个 b 对应的 c 都是
分开排序、整体乱掉的!**

所以:
c 无法再用索引!


我用一句人话总结

前面是 = → 后面有序 → 索引能用
前面是 > → 后面乱序 → 索引失效


回到你的问题:

1. 为什么a=1 and b>2 and c in(1,2)

b 能命中,c 不能命中?

因为:

  • a=1 固定
  • b>2 是范围,但 b 自己还是有序的 → 能用到索引
  • b 范围导致 c 乱序 → c 不能用索引

2. 为什么a=1 and b=2 and c>3

c 能命中?

因为:

  • a 固定
  • b 固定
  • c 自然有序 → 可以用索引

最终最精炼口诀(背这个就够了)

前面等值,后面有序;
前面范围,后面乱序;
范围一断,后面全断!


面试标准答案(你直接背)

联合索引(a,b,c)是有序结构,只有前面字段是等值(=)时,后面字段才是有序的。

  • a=1 and b=2 and c>3
    a、b 都是等值,c 有序,所以 c 能命中索引

  • a=1 and b>2 and c in(1,2)
    b 是范围查询,导致 c 变成无序,索引失效,c 无法命中

范围列会中断后面所有索引字段,无论后面是 in 还是 = 都无效。


结合联合索引有序存储的本质,用分组图示+分步拆解,彻底讲透两种场景,看完就通。

联合索引(a,b,c)底层存储逻辑:先按a排序,a相同再按b排序,b相同再按c排序,整条索引树是全局有序的。


场景1:a=1 and b=2 and c>3

条件:a=1(等值)b=2(等值)c>3(范围)

索引数据分组

a=1 └── b=2 ├── c=1 ├── c=2 ├── c=3 ├── c=4 ├── c=5 └── c=6
  1. a=1:精准定位到a=1这一大组 ✅ 命中索引
  2. b=2:在a=1组内,精准定位到b=2小组 ✅ 命中索引
  3. 此时整个小组内的 c 是连续有序排列,数据库可以直接在索引上筛选c>3
    c 也能命中索引

✅ 最终:a、b、c 三个字段全部走索引


场景2:a=1 and b>2 and c in (1,2)

条件:a=1(等值)b>2(范围)c in(1,2)(等值)

索引数据分组

a=1 ├── b=3 ← 满足 b>2 │ ├── c=5 │ ├── c=1 │ ├── c=4 │ └── c=2 ├── b=4 ← 满足 b>2 │ ├── c=2 │ ├── c=3 │ └── c=1 └── b=5 ← 满足 b>2 ├── c=4 ├── c=1 └── c=3
  1. a=1:精准定位到a=1大组 ✅ 命中索引
  2. b>2:在a=1组内,筛选出b=3、4、5等数据
    • b 自身是有序的,所以b可以正常走索引 ✅ 命中索引
  3. 关键问题:
    b范围匹配,会命中多个不同的b值
    每一个b内部的c虽然局部有序,但跨b之后,c整体完全乱序
    数据库无法利用索引规则快速筛选c in (1,2),只能遍历数据过滤。
    c 无法命中索引

✅ 最终:仅 a、b 两个字段走索引,c 索引失效


核心规则总结(记这2句)

  1. 范围字段本身可以使用索引,但范围字段之后的所有字段,索引全部中断
  2. 中断和后面是=in>无关,只要前面出现范围,后面字段都无法走索引检索(仅能靠索引下推做数据过滤)。

对比复盘(对应你两个疑问)

查询语句索引命中字段原因
a=1 and b=2 and c>3a、b、ca、b 都是等值,c 保持全局有序,范围查询可走索引
a=1 and b>2 and c in(1,2)a、bb 是范围,导致后续 c 整体乱序,索引中断

面试标准口述版

联合索引遵循顺序排序规则,字段依次有序排列。

  1. a=1 and b=2 and c>3:a 和 b 都是等值匹配,锁定唯一分组,组内 c 有序,因此三个字段都能命中索引;
  2. a=1 and b>2 and c in(1,2):b 属于范围查询,b 本身有序可以命中索引,但范围会匹配多组数据,使得后面的 c 失去全局有序性,索引中断,c 无法使用索引检索。

简单说:范围字段本身可用索引,范围之后,索引全部失效

http://www.zskr.cn/news/1439103.html

相关文章:

  • Trinity-Large-Thinking vs 主流大模型:9大基准测试数据揭示Agentic能力碾压优势 [特殊字符]
  • RevokeMsgPatcher深度解析:Windows平台微信QQ防撤回技术实现完整指南
  • 如何高效获取网盘直链:八大平台一键解析下载链接终极指南
  • 多宇宙决策树:从AI对齐到创意写作的透明化探索与实践
  • 给NAS或家用服务器分区:Ubuntu下SSD做系统盘+大容量HDD做数据盘的最佳实践
  • 123云盘功能增强脚本:全面提升网盘使用体验的完整指南
  • 安全与伦理:使用Hermes-2-Pro-Mistral-7B时需要注意的10个关键问题
  • AI模型容器化部署实战:基于Modzy平台的生产级MLOps实践
  • 如何永久保存微信聊天记录:你的数据你做主,简单三步实现
  • 从雷达历史到代码实战:手把手复现MapDrift自聚焦算法(附Python源码)
  • 从‘Hello World’到三视图联动:用Cornerstone3D和Vue3快速搭建一个Dicom阅片器原型
  • OpenEuler 20.03 LTS SP2 YUM源配置避坑指南:GPG校验失败、Repo源冲突怎么办?
  • 如何快速掌握OpCore Simplify:3个步骤实现黑苹果配置自动化革命
  • Zotero Style终极指南:3步打造高效文献管理可视化系统
  • AI语音合成技术演进:从拼接合成到端到端深度学习
  • 2026年阿里云部署OpenClaw与Hermes Agent 百炼Token Plan保姆级全流程配置教程
  • SeedVR2-7B:3分钟快速上手,让模糊视频秒变高清的终极指南!✨
  • 告别双系统!用Parallels嵌套VMware,在Mac上无缝运行你的旧虚拟机镜像
  • WinUtil终极指南:Windows系统管理一体化解决方案
  • ROMm:如何一站式管理400+平台游戏库,打造你的私人复古游戏博物馆
  • PyTorch DDP训练中,你的数据真的‘分’对了吗?详解DistributedSampler与数据加载的隐藏细节
  • 告别Keil!用Clion+CubeMX+OpenOCD打造你的现代化STM32开发环境(保姆级配置指南)
  • 2026宁波黄金回收靠谱门店推荐!同城变现省心不踩坑 - 同城好物推荐官
  • ruadapt_qwen2.5_3B_ext_u48_instruct_v4震撼发布:俄罗斯语言大模型速度提升60%的秘密
  • 2023年LLMOps入门指南:从零构建大型语言模型应用实战路线
  • 163MusicLyrics:三步快速获取网易云QQ音乐歌词的终极免费工具
  • C++11并发编程:互斥锁
  • 告别环境配置焦虑:MacBook M系列芯片(Apple Silicon)Java开发环境一键式配置心得
  • 别再手动建模了!用SolidWorks+Simulink搞机械仿真,保姆级插件安装与配置避坑指南
  • 小米MiMo-7B-MTPs震撼发布:解锁语言模型推理潜能的终极解决方案