从 0 学习 MySQL 索引——7 大核心精讲

从 0 学习 MySQL 索引------7 大核心精讲

为什么加了索引还是慢?90% 的索引失效场景都在这。


一、什么是 MySQL 索引

1.1 一句话定义

索引 = 数据库的"目录",帮你从 100w 行里快速找到 1 行,不用全表扫描。

类比:书的目录帮你快速找到某一章,不用翻整本书。

1.2 为什么需要索引

#mermaid-svg-hIR2BOXmVgGxqzSX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hIR2BOXmVgGxqzSX .error-icon{fill:#552222;}#mermaid-svg-hIR2BOXmVgGxqzSX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hIR2BOXmVgGxqzSX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hIR2BOXmVgGxqzSX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hIR2BOXmVgGxqzSX .marker.cross{stroke:#333333;}#mermaid-svg-hIR2BOXmVgGxqzSX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hIR2BOXmVgGxqzSX p{margin:0;}#mermaid-svg-hIR2BOXmVgGxqzSX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hIR2BOXmVgGxqzSX .cluster-label text{fill:#333;}#mermaid-svg-hIR2BOXmVgGxqzSX .cluster-label span{color:#333;}#mermaid-svg-hIR2BOXmVgGxqzSX .cluster-label span p{background-color:transparent;}#mermaid-svg-hIR2BOXmVgGxqzSX .label text,#mermaid-svg-hIR2BOXmVgGxqzSX span{fill:#333;color:#333;}#mermaid-svg-hIR2BOXmVgGxqzSX .node rect,#mermaid-svg-hIR2BOXmVgGxqzSX .node circle,#mermaid-svg-hIR2BOXmVgGxqzSX .node ellipse,#mermaid-svg-hIR2BOXmVgGxqzSX .node polygon,#mermaid-svg-hIR2BOXmVgGxqzSX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hIR2BOXmVgGxqzSX .rough-node .label text,#mermaid-svg-hIR2BOXmVgGxqzSX .node .label text,#mermaid-svg-hIR2BOXmVgGxqzSX .image-shape .label,#mermaid-svg-hIR2BOXmVgGxqzSX .icon-shape .label{text-anchor:middle;}#mermaid-svg-hIR2BOXmVgGxqzSX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hIR2BOXmVgGxqzSX .rough-node .label,#mermaid-svg-hIR2BOXmVgGxqzSX .node .label,#mermaid-svg-hIR2BOXmVgGxqzSX .image-shape .label,#mermaid-svg-hIR2BOXmVgGxqzSX .icon-shape .label{text-align:center;}#mermaid-svg-hIR2BOXmVgGxqzSX .node.clickable{cursor:pointer;}#mermaid-svg-hIR2BOXmVgGxqzSX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hIR2BOXmVgGxqzSX .arrowheadPath{fill:#333333;}#mermaid-svg-hIR2BOXmVgGxqzSX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hIR2BOXmVgGxqzSX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hIR2BOXmVgGxqzSX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hIR2BOXmVgGxqzSX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hIR2BOXmVgGxqzSX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hIR2BOXmVgGxqzSX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hIR2BOXmVgGxqzSX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hIR2BOXmVgGxqzSX .cluster text{fill:#333;}#mermaid-svg-hIR2BOXmVgGxqzSX .cluster span{color:#333;}#mermaid-svg-hIR2BOXmVgGxqzSX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hIR2BOXmVgGxqzSX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hIR2BOXmVgGxqzSX rect.text{fill:none;stroke-width:0;}#mermaid-svg-hIR2BOXmVgGxqzSX .icon-shape,#mermaid-svg-hIR2BOXmVgGxqzSX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hIR2BOXmVgGxqzSX .icon-shape p,#mermaid-svg-hIR2BOXmVgGxqzSX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hIR2BOXmVgGxqzSX .icon-shape .label rect,#mermaid-svg-hIR2BOXmVgGxqzSX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hIR2BOXmVgGxqzSX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hIR2BOXmVgGxqzSX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hIR2BOXmVgGxqzSX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-hIR2BOXmVgGxqzSX .bad>*{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-hIR2BOXmVgGxqzSX .bad span{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-hIR2BOXmVgGxqzSX .bad tspan{fill:#fff!important;}#mermaid-svg-hIR2BOXmVgGxqzSX .good>*{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-hIR2BOXmVgGxqzSX .good span{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-hIR2BOXmVgGxqzSX .good tspan{fill:#fff!important;} 没有索引
100w 行全表扫描
5 秒返回
有索引
B+Tree 二分查找
几毫秒返回

1.3 B+Tree 原理

概念 解释
二叉树 每个节点 2 个子节点,深度 = log2(N)
B-Tree 多路平衡查找树,每个节点多个 key
B+Tree 数据全在叶子节点,叶子节点形成链表 ⭐ MySQL 用这个

#mermaid-svg-oLCFdr6Fy27s6T0T{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-oLCFdr6Fy27s6T0T .error-icon{fill:#552222;}#mermaid-svg-oLCFdr6Fy27s6T0T .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-oLCFdr6Fy27s6T0T .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-oLCFdr6Fy27s6T0T .marker{fill:#333333;stroke:#333333;}#mermaid-svg-oLCFdr6Fy27s6T0T .marker.cross{stroke:#333333;}#mermaid-svg-oLCFdr6Fy27s6T0T svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-oLCFdr6Fy27s6T0T p{margin:0;}#mermaid-svg-oLCFdr6Fy27s6T0T .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-oLCFdr6Fy27s6T0T .cluster-label text{fill:#333;}#mermaid-svg-oLCFdr6Fy27s6T0T .cluster-label span{color:#333;}#mermaid-svg-oLCFdr6Fy27s6T0T .cluster-label span p{background-color:transparent;}#mermaid-svg-oLCFdr6Fy27s6T0T .label text,#mermaid-svg-oLCFdr6Fy27s6T0T span{fill:#333;color:#333;}#mermaid-svg-oLCFdr6Fy27s6T0T .node rect,#mermaid-svg-oLCFdr6Fy27s6T0T .node circle,#mermaid-svg-oLCFdr6Fy27s6T0T .node ellipse,#mermaid-svg-oLCFdr6Fy27s6T0T .node polygon,#mermaid-svg-oLCFdr6Fy27s6T0T .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-oLCFdr6Fy27s6T0T .rough-node .label text,#mermaid-svg-oLCFdr6Fy27s6T0T .node .label text,#mermaid-svg-oLCFdr6Fy27s6T0T .image-shape .label,#mermaid-svg-oLCFdr6Fy27s6T0T .icon-shape .label{text-anchor:middle;}#mermaid-svg-oLCFdr6Fy27s6T0T .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-oLCFdr6Fy27s6T0T .rough-node .label,#mermaid-svg-oLCFdr6Fy27s6T0T .node .label,#mermaid-svg-oLCFdr6Fy27s6T0T .image-shape .label,#mermaid-svg-oLCFdr6Fy27s6T0T .icon-shape .label{text-align:center;}#mermaid-svg-oLCFdr6Fy27s6T0T .node.clickable{cursor:pointer;}#mermaid-svg-oLCFdr6Fy27s6T0T .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-oLCFdr6Fy27s6T0T .arrowheadPath{fill:#333333;}#mermaid-svg-oLCFdr6Fy27s6T0T .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-oLCFdr6Fy27s6T0T .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-oLCFdr6Fy27s6T0T .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oLCFdr6Fy27s6T0T .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-oLCFdr6Fy27s6T0T .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oLCFdr6Fy27s6T0T .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-oLCFdr6Fy27s6T0T .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-oLCFdr6Fy27s6T0T .cluster text{fill:#333;}#mermaid-svg-oLCFdr6Fy27s6T0T .cluster span{color:#333;}#mermaid-svg-oLCFdr6Fy27s6T0T div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-oLCFdr6Fy27s6T0T .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-oLCFdr6Fy27s6T0T rect.text{fill:none;stroke-width:0;}#mermaid-svg-oLCFdr6Fy27s6T0T .icon-shape,#mermaid-svg-oLCFdr6Fy27s6T0T .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-oLCFdr6Fy27s6T0T .icon-shape p,#mermaid-svg-oLCFdr6Fy27s6T0T .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-oLCFdr6Fy27s6T0T .icon-shape .label rect,#mermaid-svg-oLCFdr6Fy27s6T0T .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-oLCFdr6Fy27s6T0T .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-oLCFdr6Fy27s6T0T .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-oLCFdr6Fy27s6T0T :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-oLCFdr6Fy27s6T0T .root>*{fill:#42A5F5!important;stroke:#1565C0!important;color:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .root span{fill:#42A5F5!important;stroke:#1565C0!important;color:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .root tspan{fill:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .inner>*{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .inner span{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .inner tspan{fill:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .leaf>*{fill:#FFA726!important;stroke:#E65100!important;color:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .leaf span{fill:#FFA726!important;stroke:#E65100!important;color:#fff!important;}#mermaid-svg-oLCFdr6Fy27s6T0T .leaf tspan{fill:#fff!important;} 根节点

50

内部节点

20, 30

内部节点

70, 90

叶子节点

10, 15

叶子节点

20, 25, 30

叶子节点

50, 60

叶子节点

70, 80, 90

B+Tree 的 3 大优势

  • 多路查找 :每个节点多个 key,树高度只有 3-4 层
  • 范围查询快 :叶子节点形成有序链表
  • 磁盘 IO 少:一次 IO 读一个节点(16KB)

1.4 索引的 3 大代价

代价 描述
写慢 INSERT / UPDATE / DELETE 要同时维护索引
占空间 索引文件可能比数据文件还大
用错更慢 失效的索引反而拖慢查询

1.5 7 大核心地图

#mermaid-svg-JznXZj9gvTTBYrgA{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-JznXZj9gvTTBYrgA .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-JznXZj9gvTTBYrgA .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-JznXZj9gvTTBYrgA .error-icon{fill:#552222;}#mermaid-svg-JznXZj9gvTTBYrgA .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-JznXZj9gvTTBYrgA .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-JznXZj9gvTTBYrgA .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-JznXZj9gvTTBYrgA .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-JznXZj9gvTTBYrgA .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-JznXZj9gvTTBYrgA .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-JznXZj9gvTTBYrgA .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-JznXZj9gvTTBYrgA .marker{fill:#333333;stroke:#333333;}#mermaid-svg-JznXZj9gvTTBYrgA .marker.cross{stroke:#333333;}#mermaid-svg-JznXZj9gvTTBYrgA svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-JznXZj9gvTTBYrgA p{margin:0;}#mermaid-svg-JznXZj9gvTTBYrgA .edge{stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .section--1 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section--1 path,#mermaid-svg-JznXZj9gvTTBYrgA .section--1 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section--1 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section--1 text{fill:#ffffff;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth--1{stroke-width:17;}#mermaid-svg-JznXZj9gvTTBYrgA .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-0 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-0 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-0 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-0 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-0 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-0{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-0{stroke-width:14;}#mermaid-svg-JznXZj9gvTTBYrgA .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-1 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-1 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-1 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-1 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-1 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-1{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-1{stroke-width:11;}#mermaid-svg-JznXZj9gvTTBYrgA .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-2 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-2 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-2 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-2 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-2 text{fill:#ffffff;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-2{stroke-width:8;}#mermaid-svg-JznXZj9gvTTBYrgA .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-3 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-3 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-3 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-3 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-3 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-3{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-3{stroke-width:5;}#mermaid-svg-JznXZj9gvTTBYrgA .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-4 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-4 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-4 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-4 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-4 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-4{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-4{stroke-width:2;}#mermaid-svg-JznXZj9gvTTBYrgA .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-5 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-5 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-5 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-5 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-5 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-5{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-5{stroke-width:-1;}#mermaid-svg-JznXZj9gvTTBYrgA .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-6 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-6 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-6 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-6 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-6 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-6{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-6{stroke-width:-4;}#mermaid-svg-JznXZj9gvTTBYrgA .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-7 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-7 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-7 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-7 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-7 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-7{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-7{stroke-width:-7;}#mermaid-svg-JznXZj9gvTTBYrgA .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-8 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-8 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-8 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-8 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-8 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-8{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-8{stroke-width:-10;}#mermaid-svg-JznXZj9gvTTBYrgA .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-9 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-9 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-9 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-9 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-9 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-9{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-9{stroke-width:-13;}#mermaid-svg-JznXZj9gvTTBYrgA .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-10 rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-10 path,#mermaid-svg-JznXZj9gvTTBYrgA .section-10 circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-10 polygon,#mermaid-svg-JznXZj9gvTTBYrgA .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-10 text{fill:black;}#mermaid-svg-JznXZj9gvTTBYrgA .node-icon-10{font-size:40px;color:black;}#mermaid-svg-JznXZj9gvTTBYrgA .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .edge-depth-10{stroke-width:-16;}#mermaid-svg-JznXZj9gvTTBYrgA .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled,#mermaid-svg-JznXZj9gvTTBYrgA .disabled circle,#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:lightgray;}#mermaid-svg-JznXZj9gvTTBYrgA .disabled text{fill:#efefef;}#mermaid-svg-JznXZj9gvTTBYrgA .section-root rect,#mermaid-svg-JznXZj9gvTTBYrgA .section-root path,#mermaid-svg-JznXZj9gvTTBYrgA .section-root circle,#mermaid-svg-JznXZj9gvTTBYrgA .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-JznXZj9gvTTBYrgA .section-root text{fill:#ffffff;}#mermaid-svg-JznXZj9gvTTBYrgA .section-root span{color:#ffffff;}#mermaid-svg-JznXZj9gvTTBYrgA .section-2 span{color:#ffffff;}#mermaid-svg-JznXZj9gvTTBYrgA .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-JznXZj9gvTTBYrgA .edge{fill:none;}#mermaid-svg-JznXZj9gvTTBYrgA .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-JznXZj9gvTTBYrgA :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} MySQL 索引

7 大核心
结构
聚簇 vs 非聚簇
语法
CRUD 增删改查
失效
10 大场景
优化
覆盖索引
最左前缀
索引下推 ICP
实战
EXPLAIN 调优


二、聚簇 vs 非聚簇索引

2.1 一句话定义

  • 聚簇索引:数据的物理存储顺序和索引顺序一致
  • 非聚簇索引:索引和数据分开存储

2.2 InnoDB vs MyISAM

#mermaid-svg-iacEqustijqc8fkF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-iacEqustijqc8fkF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-iacEqustijqc8fkF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-iacEqustijqc8fkF .error-icon{fill:#552222;}#mermaid-svg-iacEqustijqc8fkF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-iacEqustijqc8fkF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-iacEqustijqc8fkF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-iacEqustijqc8fkF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-iacEqustijqc8fkF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-iacEqustijqc8fkF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-iacEqustijqc8fkF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-iacEqustijqc8fkF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-iacEqustijqc8fkF .marker.cross{stroke:#333333;}#mermaid-svg-iacEqustijqc8fkF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-iacEqustijqc8fkF p{margin:0;}#mermaid-svg-iacEqustijqc8fkF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-iacEqustijqc8fkF .cluster-label text{fill:#333;}#mermaid-svg-iacEqustijqc8fkF .cluster-label span{color:#333;}#mermaid-svg-iacEqustijqc8fkF .cluster-label span p{background-color:transparent;}#mermaid-svg-iacEqustijqc8fkF .label text,#mermaid-svg-iacEqustijqc8fkF span{fill:#333;color:#333;}#mermaid-svg-iacEqustijqc8fkF .node rect,#mermaid-svg-iacEqustijqc8fkF .node circle,#mermaid-svg-iacEqustijqc8fkF .node ellipse,#mermaid-svg-iacEqustijqc8fkF .node polygon,#mermaid-svg-iacEqustijqc8fkF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-iacEqustijqc8fkF .rough-node .label text,#mermaid-svg-iacEqustijqc8fkF .node .label text,#mermaid-svg-iacEqustijqc8fkF .image-shape .label,#mermaid-svg-iacEqustijqc8fkF .icon-shape .label{text-anchor:middle;}#mermaid-svg-iacEqustijqc8fkF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-iacEqustijqc8fkF .rough-node .label,#mermaid-svg-iacEqustijqc8fkF .node .label,#mermaid-svg-iacEqustijqc8fkF .image-shape .label,#mermaid-svg-iacEqustijqc8fkF .icon-shape .label{text-align:center;}#mermaid-svg-iacEqustijqc8fkF .node.clickable{cursor:pointer;}#mermaid-svg-iacEqustijqc8fkF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-iacEqustijqc8fkF .arrowheadPath{fill:#333333;}#mermaid-svg-iacEqustijqc8fkF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-iacEqustijqc8fkF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-iacEqustijqc8fkF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iacEqustijqc8fkF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-iacEqustijqc8fkF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iacEqustijqc8fkF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-iacEqustijqc8fkF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-iacEqustijqc8fkF .cluster text{fill:#333;}#mermaid-svg-iacEqustijqc8fkF .cluster span{color:#333;}#mermaid-svg-iacEqustijqc8fkF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-iacEqustijqc8fkF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-iacEqustijqc8fkF rect.text{fill:none;stroke-width:0;}#mermaid-svg-iacEqustijqc8fkF .icon-shape,#mermaid-svg-iacEqustijqc8fkF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-iacEqustijqc8fkF .icon-shape p,#mermaid-svg-iacEqustijqc8fkF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-iacEqustijqc8fkF .icon-shape .label rect,#mermaid-svg-iacEqustijqc8fkF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-iacEqustijqc8fkF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-iacEqustijqc8fkF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-iacEqustijqc8fkF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-iacEqustijqc8fkF .good>*{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-iacEqustijqc8fkF .good span{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-iacEqustijqc8fkF .good tspan{fill:#fff!important;}#mermaid-svg-iacEqustijqc8fkF .bad>*{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-iacEqustijqc8fkF .bad span{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-iacEqustijqc8fkF .bad tspan{fill:#fff!important;} MyISAM(老古董)
非聚簇索引

索引和数据分开

叶子节点存地址
InnoDB(默认)
聚簇索引

数据 = 索引

叶子节点存数据

维度 InnoDB(聚簇) MyISAM(非聚簇)
数据存储 索引叶子节点存数据 索引叶子节点存地址
主键 必须有(数据按主键组织) 可以没有
二级索引 叶子节点存主键 叶子节点存地址
性能 (少一次回表) 慢(多一次寻址)

2.3 回表查询(核心概念)

数据 聚簇索引(id) 二级索引(name) 业务代码 数据 聚簇索引(id) 二级索引(name) 业务代码 #mermaid-svg-PrH2fMnJJgL2Vdsp{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PrH2fMnJJgL2Vdsp .error-icon{fill:#552222;}#mermaid-svg-PrH2fMnJJgL2Vdsp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PrH2fMnJJgL2Vdsp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PrH2fMnJJgL2Vdsp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PrH2fMnJJgL2Vdsp .marker.cross{stroke:#333333;}#mermaid-svg-PrH2fMnJJgL2Vdsp svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PrH2fMnJJgL2Vdsp p{margin:0;}#mermaid-svg-PrH2fMnJJgL2Vdsp .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-PrH2fMnJJgL2Vdsp text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-PrH2fMnJJgL2Vdsp .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-PrH2fMnJJgL2Vdsp .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-PrH2fMnJJgL2Vdsp .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-PrH2fMnJJgL2Vdsp .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-PrH2fMnJJgL2Vdsp #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-PrH2fMnJJgL2Vdsp .sequenceNumber{fill:white;}#mermaid-svg-PrH2fMnJJgL2Vdsp #sequencenumber{fill:#333;}#mermaid-svg-PrH2fMnJJgL2Vdsp #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-PrH2fMnJJgL2Vdsp .messageText{fill:#333;stroke:none;}#mermaid-svg-PrH2fMnJJgL2Vdsp .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-PrH2fMnJJgL2Vdsp .labelText,#mermaid-svg-PrH2fMnJJgL2Vdsp .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-PrH2fMnJJgL2Vdsp .loopText,#mermaid-svg-PrH2fMnJJgL2Vdsp .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-PrH2fMnJJgL2Vdsp .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-PrH2fMnJJgL2Vdsp .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-PrH2fMnJJgL2Vdsp .noteText,#mermaid-svg-PrH2fMnJJgL2Vdsp .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-PrH2fMnJJgL2Vdsp .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-PrH2fMnJJgL2Vdsp .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-PrH2fMnJJgL2Vdsp .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-PrH2fMnJJgL2Vdsp .actorPopupMenu{position:absolute;}#mermaid-svg-PrH2fMnJJgL2Vdsp .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-PrH2fMnJJgL2Vdsp .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-PrH2fMnJJgL2Vdsp .actor-man circle,#mermaid-svg-PrH2fMnJJgL2Vdsp line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-PrH2fMnJJgL2Vdsp :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} SELECT * WHERE name='张三'找到 name='张三'叶子节点 = id=10回表:用 id=10 查聚簇索引找到 id=10 的完整行返回 {id:10, name:'张三', age:30, ...}

"回表" :二级索引找到主键 → 用主键回聚簇索引找完整数据 → 多一次 IO

2.4 关键点

  • InnoDB 是聚簇索引,数据按主键组织
  • 二级索引叶子节点存的是主键,不是数据
  • 回表 = 用主键再查一次聚簇索引
  • 不要用 UUID / 随机字符串做主键(B+Tree 频繁分裂)
  • 推荐用自增 BIGINT 做主键

三、索引语法(CRUD)

3.1 创建索引

sql 复制代码
-- ① 普通索引
CREATE INDEX idx_name ON user(name);

-- ② 唯一索引
CREATE UNIQUE INDEX uk_phone ON user(phone);

-- ③ 联合索引(多个字段)
CREATE INDEX idx_name_age ON user(name, age);

-- ④ 前缀索引(节省空间,字符串字段)
CREATE INDEX idx_email ON user(email(10));

-- ⑤ 建表时一起建
CREATE TABLE user (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT,
    INDEX idx_name (name)
);

3.2 删除索引

sql 复制代码
DROP INDEX idx_name ON user;

-- 或
ALTER TABLE user DROP INDEX idx_name;

3.3 查看索引

sql 复制代码
SHOW INDEX FROM user;

3.4 修改索引

sql 复制代码
-- 添加索引
ALTER TABLE user ADD INDEX idx_age (age);

-- 删除索引
ALTER TABLE user DROP INDEX idx_age;

3.5 关键点

  • ALTER TABLE ADD INDEXCREATE INDEX 更常用(一条 SQL 改多个)
  • 联合索引字段顺序很重要(见下文)
  • UNIQUE INDEX 既能查重,又能加速查询
  • PRIMARY KEY 自动是唯一索引
  • 生产环境不要乱建索引(写慢 + 占空间)

四、索引失效 10 大场景 ⭐ 重头

4.1 失效的本质

#mermaid-svg-RnAPXQelkhwGYXQj{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RnAPXQelkhwGYXQj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RnAPXQelkhwGYXQj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RnAPXQelkhwGYXQj .error-icon{fill:#552222;}#mermaid-svg-RnAPXQelkhwGYXQj .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RnAPXQelkhwGYXQj .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RnAPXQelkhwGYXQj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RnAPXQelkhwGYXQj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RnAPXQelkhwGYXQj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RnAPXQelkhwGYXQj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RnAPXQelkhwGYXQj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RnAPXQelkhwGYXQj .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RnAPXQelkhwGYXQj .marker.cross{stroke:#333333;}#mermaid-svg-RnAPXQelkhwGYXQj svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RnAPXQelkhwGYXQj p{margin:0;}#mermaid-svg-RnAPXQelkhwGYXQj .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-RnAPXQelkhwGYXQj .cluster-label text{fill:#333;}#mermaid-svg-RnAPXQelkhwGYXQj .cluster-label span{color:#333;}#mermaid-svg-RnAPXQelkhwGYXQj .cluster-label span p{background-color:transparent;}#mermaid-svg-RnAPXQelkhwGYXQj .label text,#mermaid-svg-RnAPXQelkhwGYXQj span{fill:#333;color:#333;}#mermaid-svg-RnAPXQelkhwGYXQj .node rect,#mermaid-svg-RnAPXQelkhwGYXQj .node circle,#mermaid-svg-RnAPXQelkhwGYXQj .node ellipse,#mermaid-svg-RnAPXQelkhwGYXQj .node polygon,#mermaid-svg-RnAPXQelkhwGYXQj .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RnAPXQelkhwGYXQj .rough-node .label text,#mermaid-svg-RnAPXQelkhwGYXQj .node .label text,#mermaid-svg-RnAPXQelkhwGYXQj .image-shape .label,#mermaid-svg-RnAPXQelkhwGYXQj .icon-shape .label{text-anchor:middle;}#mermaid-svg-RnAPXQelkhwGYXQj .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RnAPXQelkhwGYXQj .rough-node .label,#mermaid-svg-RnAPXQelkhwGYXQj .node .label,#mermaid-svg-RnAPXQelkhwGYXQj .image-shape .label,#mermaid-svg-RnAPXQelkhwGYXQj .icon-shape .label{text-align:center;}#mermaid-svg-RnAPXQelkhwGYXQj .node.clickable{cursor:pointer;}#mermaid-svg-RnAPXQelkhwGYXQj .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RnAPXQelkhwGYXQj .arrowheadPath{fill:#333333;}#mermaid-svg-RnAPXQelkhwGYXQj .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RnAPXQelkhwGYXQj .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RnAPXQelkhwGYXQj .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RnAPXQelkhwGYXQj .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RnAPXQelkhwGYXQj .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RnAPXQelkhwGYXQj .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RnAPXQelkhwGYXQj .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RnAPXQelkhwGYXQj .cluster text{fill:#333;}#mermaid-svg-RnAPXQelkhwGYXQj .cluster span{color:#333;}#mermaid-svg-RnAPXQelkhwGYXQj div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RnAPXQelkhwGYXQj .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RnAPXQelkhwGYXQj rect.text{fill:none;stroke-width:0;}#mermaid-svg-RnAPXQelkhwGYXQj .icon-shape,#mermaid-svg-RnAPXQelkhwGYXQj .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RnAPXQelkhwGYXQj .icon-shape p,#mermaid-svg-RnAPXQelkhwGYXQj .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RnAPXQelkhwGYXQj .icon-shape .label rect,#mermaid-svg-RnAPXQelkhwGYXQj .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RnAPXQelkhwGYXQj .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RnAPXQelkhwGYXQj .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RnAPXQelkhwGYXQj :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-RnAPXQelkhwGYXQj .good>*{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-RnAPXQelkhwGYXQj .good span{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-RnAPXQelkhwGYXQj .good tspan{fill:#fff!important;}#mermaid-svg-RnAPXQelkhwGYXQj .bad>*{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-RnAPXQelkhwGYXQj .bad span{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-RnAPXQelkhwGYXQj .bad tspan{fill:#fff!important;} 是

WHERE 条件
符合最左前缀?

类型转换?

函数运算?
✅ 走索引
❌ 全表扫描

4.2 10 大失效场景

# 场景 反例 正例
1 最左前缀违反 WHERE age=20(name 丢了) WHERE name='张三' AND age=20
2 范围条件右边失效 WHERE name='张三' AND age>20 AND status=1 范围放最后
3 LIKE 左模糊 WHERE name LIKE '%三' WHERE name LIKE '张%'
4 类型转换 WHERE phone=13800138000(phone 是 varchar) WHERE phone='13800138000'
5 函数运算 WHERE YEAR(create_time)=2024 WHERE create_time BETWEEN '2024-01-01' AND '2024-12-31'
6 OR 不全有索引 WHERE name='张三' OR age=20(age 无索引) 给 age 建索引
7 不等于 != / <> WHERE status != 1 业务上重写为 IN 或 =
8 IS NULL / IS NOT NULL WHERE name IS NULL 视情况而定
9 数据量小 表只有 100 行 MySQL 优化器主动放弃索引
10 ORDER BY 无索引 SELECT * ORDER BY name 建联合索引

4.3 失效场景详解(重点 3 个)

场景 1:最左前缀违反(最常踩)

sql 复制代码
-- 联合索引 (name, age, status)
-- ❌ 失效:跳过 name
SELECT * FROM user WHERE age = 20;

-- ✅ 生效:从 name 开始
SELECT * FROM user WHERE name = '张三' AND age = 20;

场景 2:范围条件右边失效

sql 复制代码
-- 联合索引 (name, age, status)
-- ❌ 失效:status 失效(age 是范围)
SELECT * FROM user WHERE name='张三' AND age>20 AND status=1;

-- ✅ 改写:把范围放最后
SELECT * FROM user WHERE name='张三' AND status=1 AND age>20;

场景 3:类型转换

sql 复制代码
-- phone 是 varchar,有索引
-- ❌ 失效:phone=数字(MySQL 隐式转换)
SELECT * FROM user WHERE phone = 13800138000;

-- ✅ 生效:phone=字符串
SELECT * FROM user WHERE phone = '13800138000';

4.4 关键点

  • 所有字段都要符合最左前缀
  • 范围条件放最后
  • 类型要匹配(数字 ≠ 字符串)
  • 不要在索引列上做运算 / 函数
  • OR 两边都要有索引

五、覆盖索引

5.1 一句话定义

覆盖索引 = 索引包含查询所需的全部字段,不需要回表。

5.2 为什么覆盖索引快?

#mermaid-svg-IXYPtdA6jiquGirq{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-IXYPtdA6jiquGirq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-IXYPtdA6jiquGirq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-IXYPtdA6jiquGirq .error-icon{fill:#552222;}#mermaid-svg-IXYPtdA6jiquGirq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-IXYPtdA6jiquGirq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-IXYPtdA6jiquGirq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-IXYPtdA6jiquGirq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-IXYPtdA6jiquGirq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-IXYPtdA6jiquGirq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-IXYPtdA6jiquGirq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-IXYPtdA6jiquGirq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-IXYPtdA6jiquGirq .marker.cross{stroke:#333333;}#mermaid-svg-IXYPtdA6jiquGirq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-IXYPtdA6jiquGirq p{margin:0;}#mermaid-svg-IXYPtdA6jiquGirq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-IXYPtdA6jiquGirq .cluster-label text{fill:#333;}#mermaid-svg-IXYPtdA6jiquGirq .cluster-label span{color:#333;}#mermaid-svg-IXYPtdA6jiquGirq .cluster-label span p{background-color:transparent;}#mermaid-svg-IXYPtdA6jiquGirq .label text,#mermaid-svg-IXYPtdA6jiquGirq span{fill:#333;color:#333;}#mermaid-svg-IXYPtdA6jiquGirq .node rect,#mermaid-svg-IXYPtdA6jiquGirq .node circle,#mermaid-svg-IXYPtdA6jiquGirq .node ellipse,#mermaid-svg-IXYPtdA6jiquGirq .node polygon,#mermaid-svg-IXYPtdA6jiquGirq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-IXYPtdA6jiquGirq .rough-node .label text,#mermaid-svg-IXYPtdA6jiquGirq .node .label text,#mermaid-svg-IXYPtdA6jiquGirq .image-shape .label,#mermaid-svg-IXYPtdA6jiquGirq .icon-shape .label{text-anchor:middle;}#mermaid-svg-IXYPtdA6jiquGirq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-IXYPtdA6jiquGirq .rough-node .label,#mermaid-svg-IXYPtdA6jiquGirq .node .label,#mermaid-svg-IXYPtdA6jiquGirq .image-shape .label,#mermaid-svg-IXYPtdA6jiquGirq .icon-shape .label{text-align:center;}#mermaid-svg-IXYPtdA6jiquGirq .node.clickable{cursor:pointer;}#mermaid-svg-IXYPtdA6jiquGirq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-IXYPtdA6jiquGirq .arrowheadPath{fill:#333333;}#mermaid-svg-IXYPtdA6jiquGirq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-IXYPtdA6jiquGirq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-IXYPtdA6jiquGirq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IXYPtdA6jiquGirq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-IXYPtdA6jiquGirq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IXYPtdA6jiquGirq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-IXYPtdA6jiquGirq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-IXYPtdA6jiquGirq .cluster text{fill:#333;}#mermaid-svg-IXYPtdA6jiquGirq .cluster span{color:#333;}#mermaid-svg-IXYPtdA6jiquGirq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-IXYPtdA6jiquGirq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-IXYPtdA6jiquGirq rect.text{fill:none;stroke-width:0;}#mermaid-svg-IXYPtdA6jiquGirq .icon-shape,#mermaid-svg-IXYPtdA6jiquGirq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-IXYPtdA6jiquGirq .icon-shape p,#mermaid-svg-IXYPtdA6jiquGirq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-IXYPtdA6jiquGirq .icon-shape .label rect,#mermaid-svg-IXYPtdA6jiquGirq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-IXYPtdA6jiquGirq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-IXYPtdA6jiquGirq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-IXYPtdA6jiquGirq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-IXYPtdA6jiquGirq .normal>*{fill:#FFA726!important;stroke:#E65100!important;color:#fff!important;}#mermaid-svg-IXYPtdA6jiquGirq .normal span{fill:#FFA726!important;stroke:#E65100!important;color:#fff!important;}#mermaid-svg-IXYPtdA6jiquGirq .normal tspan{fill:#fff!important;}#mermaid-svg-IXYPtdA6jiquGirq .cover>*{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-IXYPtdA6jiquGirq .cover span{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-IXYPtdA6jiquGirq .cover tspan{fill:#fff!important;} 普通索引
索引找到 id
回表查完整行
返回数据
覆盖索引
索引直接返回字段
不需要回表

5.3 实战对比

sql 复制代码
-- 表 user 有联合索引 (name, age)
-- ❌ 不覆盖:需要回表(SELECT *)
SELECT * FROM user WHERE name = '张三';

-- ✅ 覆盖:不需要回表
SELECT name, age FROM user WHERE name = '张三';

5.4 实战技巧:分页查询

sql 复制代码
-- 表 order 有联合索引 (user_id, status, create_time)

-- ❌ 不覆盖
SELECT * FROM order WHERE user_id = 123 ORDER BY create_time DESC LIMIT 20;

-- ✅ 覆盖:先查主键,再回表
SELECT id FROM order WHERE user_id = 123 ORDER BY create_time DESC LIMIT 20;
-- 然后用 id 查完整数据

好处 :先查主键(走覆盖索引)→ 用主键查完整行 → 避免大量回表

5.5 关键点

  • 覆盖索引 = 不回表
  • SELECT 字段全部在索引里 即可覆盖
  • 分页查询 + 覆盖索引:先查 id,再回表
  • EXPLAIN 看 Extra 列 :出现 Using index 就是覆盖索引
  • SELECT * 大概率不覆盖

六、最左前缀原则

6.1 一句话定义

联合索引 (a, b, c) = 3 个索引:(a) + (a, b) + (a, b, c),但不是 (b, c)。

6.2 图解

#mermaid-svg-SzPunwjX6ZGu6SzU{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SzPunwjX6ZGu6SzU .error-icon{fill:#552222;}#mermaid-svg-SzPunwjX6ZGu6SzU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SzPunwjX6ZGu6SzU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SzPunwjX6ZGu6SzU .marker.cross{stroke:#333333;}#mermaid-svg-SzPunwjX6ZGu6SzU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SzPunwjX6ZGu6SzU p{margin:0;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge{stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .section--1 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section--1 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section--1 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section--1 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section--1 text{fill:#ffffff;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth--1{stroke-width:17;}#mermaid-svg-SzPunwjX6ZGu6SzU .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-0 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-0 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-0 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-0 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-0 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-0{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-0{stroke-width:14;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-1 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-1 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-1 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-1 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-1 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-1{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-1{stroke-width:11;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 text{fill:#ffffff;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-2{stroke-width:8;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-3 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-3 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-3 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-3 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-3 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-3{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-3{stroke-width:5;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-4 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-4 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-4 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-4 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-4 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-4{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-4{stroke-width:2;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-5 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-5 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-5 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-5 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-5 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-5{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-5{stroke-width:-1;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-6 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-6 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-6 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-6 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-6 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-6{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-6{stroke-width:-4;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-7 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-7 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-7 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-7 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-7 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-7{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-7{stroke-width:-7;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-8 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-8 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-8 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-8 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-8 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-8{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-8{stroke-width:-10;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-9 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-9 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-9 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-9 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-9 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-9{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-9{stroke-width:-13;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-10 rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-10 path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-10 circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-10 polygon,#mermaid-svg-SzPunwjX6ZGu6SzU .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-10 text{fill:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .node-icon-10{font-size:40px;color:black;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .edge-depth-10{stroke-width:-16;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled circle,#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:lightgray;}#mermaid-svg-SzPunwjX6ZGu6SzU .disabled text{fill:#efefef;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-root rect,#mermaid-svg-SzPunwjX6ZGu6SzU .section-root path,#mermaid-svg-SzPunwjX6ZGu6SzU .section-root circle,#mermaid-svg-SzPunwjX6ZGu6SzU .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-SzPunwjX6ZGu6SzU .section-root text{fill:#ffffff;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-root span{color:#ffffff;}#mermaid-svg-SzPunwjX6ZGu6SzU .section-2 span{color:#ffffff;}#mermaid-svg-SzPunwjX6ZGu6SzU .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-SzPunwjX6ZGu6SzU .edge{fill:none;}#mermaid-svg-SzPunwjX6ZGu6SzU .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-SzPunwjX6ZGu6SzU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 联合索引

name, age, status
生效
name
name + age
name + age + status
失效
age
status
age + status

6.3 实战对比

sql 复制代码
-- 联合索引 (name, age, status)
-- ✅ 生效:3 段都走索引
SELECT * FROM user WHERE name='张三' AND age=20 AND status=1;

-- ✅ 生效:name 段
SELECT * FROM user WHERE name='张三';

-- ✅ 生效:name + age 段
SELECT * FROM user WHERE name='张三' AND age=20;

-- ❌ 失效:跳过 name
SELECT * FROM user WHERE age=20;

-- ❌ 失效:只查 status
SELECT * FROM user WHERE status=1;

-- ❌ 失效:age + status(不连续)
SELECT * FROM user WHERE age=20 AND status=1;

6.4 字段顺序怎么定?

口诀"高频在前,等值在前,范围在后"

字段 顺序 原因
高频查询字段 1 最左前缀必须用它
等值条件 2 范围之前
范围条件 最后 范围之后字段失效

6.5 关键点

  • 最左前缀 = 联合索引从最左字段开始生效
  • 跳过中间字段,后续全部失效
  • 字段顺序:高频在前,等值在前,范围在后
  • 不要按字段名字母顺序排
  • 不要所有字段都建联合索引

七、索引下推 ICP

7.1 一句话定义

索引下推(ICP)= MySQL 5.6+ 优化器把 WHERE 条件下推到存储引擎层,减少回表。

7.2 没有 ICP 时

sql 复制代码
-- 联合索引 (name, age)
-- WHERE name LIKE '张%' AND age = 20

-- 没有 ICP:
-- 1. 二级索引找到所有 name LIKE '张%' 的 id(不回表)
-- 2. 用 id 回聚簇索引查完整行
-- 3. 在 Server 层过滤 age = 20
-- ❌ 回表 N 次(所有 name LIKE '张%' 的行)

7.3 有 ICP 时

sql 复制代码
-- 有 ICP:
-- 1. 二级索引找到所有 name LIKE '张%' AND age = 20 的 id
--    ★ 关键:在存储引擎层就过滤了 age = 20
-- 2. 用 id 回聚簇索引查完整行
-- ✅ 只回表满足 age=20 的行

7.4 关键点

  • MySQL 5.6+ 默认开启
  • EXPLAIN 看 Extra 列 :出现 Using index condition 就是 ICP
  • 联合索引生效时,范围条件尽量放最后(让 ICP 过滤更多)
  • ❌ 不需要手动开启(默认开启)

八、EXPLAIN 调优实战 ⭐ 终极武器

8.1 一句话定义

EXPLAIN = MySQL 的"慢 SQL 显微镜",告诉你这条 SQL 走没走索引、走哪个索引、扫多少行。

8.2 EXPLAIN 12 大字段

sql 复制代码
EXPLAIN SELECT * FROM user WHERE name = '张三';
字段 含义 重点关注
id 查询序号 同 SELECT 一样大
select_type 查询类型 SIMPLE / SUBQUERY
table 表名 -
type 访问类型 ⭐⭐⭐⭐⭐
possible_keys 可能用的索引 -
key 实际用的索引 ⭐⭐⭐⭐⭐
key_len 索引长度 联合索引看哪几个字段生效
ref 索引比较的列 const / func
rows 扫描行数 ⭐⭐⭐⭐
filtered 过滤比例 百分比
Extra 额外信息 ⭐⭐⭐⭐⭐

8.3 type 访问类型(最重要)

#mermaid-svg-QpE2gj10Lhu2Fzci{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QpE2gj10Lhu2Fzci .error-icon{fill:#552222;}#mermaid-svg-QpE2gj10Lhu2Fzci .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QpE2gj10Lhu2Fzci .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QpE2gj10Lhu2Fzci .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QpE2gj10Lhu2Fzci .marker.cross{stroke:#333333;}#mermaid-svg-QpE2gj10Lhu2Fzci svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QpE2gj10Lhu2Fzci p{margin:0;}#mermaid-svg-QpE2gj10Lhu2Fzci .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QpE2gj10Lhu2Fzci .cluster-label text{fill:#333;}#mermaid-svg-QpE2gj10Lhu2Fzci .cluster-label span{color:#333;}#mermaid-svg-QpE2gj10Lhu2Fzci .cluster-label span p{background-color:transparent;}#mermaid-svg-QpE2gj10Lhu2Fzci .label text,#mermaid-svg-QpE2gj10Lhu2Fzci span{fill:#333;color:#333;}#mermaid-svg-QpE2gj10Lhu2Fzci .node rect,#mermaid-svg-QpE2gj10Lhu2Fzci .node circle,#mermaid-svg-QpE2gj10Lhu2Fzci .node ellipse,#mermaid-svg-QpE2gj10Lhu2Fzci .node polygon,#mermaid-svg-QpE2gj10Lhu2Fzci .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QpE2gj10Lhu2Fzci .rough-node .label text,#mermaid-svg-QpE2gj10Lhu2Fzci .node .label text,#mermaid-svg-QpE2gj10Lhu2Fzci .image-shape .label,#mermaid-svg-QpE2gj10Lhu2Fzci .icon-shape .label{text-anchor:middle;}#mermaid-svg-QpE2gj10Lhu2Fzci .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QpE2gj10Lhu2Fzci .rough-node .label,#mermaid-svg-QpE2gj10Lhu2Fzci .node .label,#mermaid-svg-QpE2gj10Lhu2Fzci .image-shape .label,#mermaid-svg-QpE2gj10Lhu2Fzci .icon-shape .label{text-align:center;}#mermaid-svg-QpE2gj10Lhu2Fzci .node.clickable{cursor:pointer;}#mermaid-svg-QpE2gj10Lhu2Fzci .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QpE2gj10Lhu2Fzci .arrowheadPath{fill:#333333;}#mermaid-svg-QpE2gj10Lhu2Fzci .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QpE2gj10Lhu2Fzci .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QpE2gj10Lhu2Fzci .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QpE2gj10Lhu2Fzci .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QpE2gj10Lhu2Fzci .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QpE2gj10Lhu2Fzci .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QpE2gj10Lhu2Fzci .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QpE2gj10Lhu2Fzci .cluster text{fill:#333;}#mermaid-svg-QpE2gj10Lhu2Fzci .cluster span{color:#333;}#mermaid-svg-QpE2gj10Lhu2Fzci div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QpE2gj10Lhu2Fzci .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QpE2gj10Lhu2Fzci rect.text{fill:none;stroke-width:0;}#mermaid-svg-QpE2gj10Lhu2Fzci .icon-shape,#mermaid-svg-QpE2gj10Lhu2Fzci .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QpE2gj10Lhu2Fzci .icon-shape p,#mermaid-svg-QpE2gj10Lhu2Fzci .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QpE2gj10Lhu2Fzci .icon-shape .label rect,#mermaid-svg-QpE2gj10Lhu2Fzci .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QpE2gj10Lhu2Fzci .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QpE2gj10Lhu2Fzci .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QpE2gj10Lhu2Fzci :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-QpE2gj10Lhu2Fzci .good>*{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-QpE2gj10Lhu2Fzci .good span{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-QpE2gj10Lhu2Fzci .good tspan{fill:#fff!important;}#mermaid-svg-QpE2gj10Lhu2Fzci .bad>*{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-QpE2gj10Lhu2Fzci .bad span{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-QpE2gj10Lhu2Fzci .bad tspan{fill:#fff!important;} system
const
eq_ref
ref
range
index
ALL
❌ 全表扫描

type 含义 性能
system 表只有 1 行 ⭐⭐⭐⭐⭐
const 主键 / 唯一索引等值 ⭐⭐⭐⭐⭐
eq_ref JOIN 主键 / 唯一索引 ⭐⭐⭐⭐⭐
ref 非唯一索引等值 ⭐⭐⭐⭐
range 范围扫描 ⭐⭐⭐
index 全索引扫描 ⭐⭐
ALL 全表扫描

8.4 Extra 常见值

含义 处理
Using index 覆盖索引 ✅ 好
Using where Server 层过滤 正常
Using index condition ICP 生效 ✅ 好
Using filesort 额外排序 ⚠️ 优化
Using temporary 临时表 ⚠️ 优化
Using join buffer JOIN 缓冲 正常

8.5 实战调优案例

慢 SQL:

sql 复制代码
SELECT * FROM order WHERE user_id = 123 AND status = 1 ORDER BY create_time DESC LIMIT 20;

EXPLAIN 一下

复制代码
type: ref
key: idx_user_id  ← 只用到了 user_id 索引
rows: 50000       ← 扫了 5w 行
Extra: Using filesort  ← 额外排序

优化

sql 复制代码
-- 建联合索引(user_id, status, create_time)
CREATE INDEX idx_user_status_time ON order(user_id, status, create_time);

-- EXPLAIN 再查
-- type: ref
-- key: idx_user_status_time  ← 用到 3 字段联合索引
-- rows: 20                    ← 只扫 20 行
-- Extra: Using index condition  ← ICP 生效

优化结果 :5w 行 → 20 行,从 5 秒到 50ms

8.6 关键点

  • type 至少要到 refALL 必须优化
  • key 看实际用到的索引
  • rows 越小越好
  • Using filesort / Using temporary 要警惕
  • EXPLAIN 是慢 SQL 调优的第一步

九、7 大核心的关系图

#mermaid-svg-TMv8IVnMv9gpWJTH{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-TMv8IVnMv9gpWJTH .error-icon{fill:#552222;}#mermaid-svg-TMv8IVnMv9gpWJTH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TMv8IVnMv9gpWJTH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TMv8IVnMv9gpWJTH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TMv8IVnMv9gpWJTH .marker.cross{stroke:#333333;}#mermaid-svg-TMv8IVnMv9gpWJTH svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TMv8IVnMv9gpWJTH p{margin:0;}#mermaid-svg-TMv8IVnMv9gpWJTH .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-TMv8IVnMv9gpWJTH .cluster-label text{fill:#333;}#mermaid-svg-TMv8IVnMv9gpWJTH .cluster-label span{color:#333;}#mermaid-svg-TMv8IVnMv9gpWJTH .cluster-label span p{background-color:transparent;}#mermaid-svg-TMv8IVnMv9gpWJTH .label text,#mermaid-svg-TMv8IVnMv9gpWJTH span{fill:#333;color:#333;}#mermaid-svg-TMv8IVnMv9gpWJTH .node rect,#mermaid-svg-TMv8IVnMv9gpWJTH .node circle,#mermaid-svg-TMv8IVnMv9gpWJTH .node ellipse,#mermaid-svg-TMv8IVnMv9gpWJTH .node polygon,#mermaid-svg-TMv8IVnMv9gpWJTH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TMv8IVnMv9gpWJTH .rough-node .label text,#mermaid-svg-TMv8IVnMv9gpWJTH .node .label text,#mermaid-svg-TMv8IVnMv9gpWJTH .image-shape .label,#mermaid-svg-TMv8IVnMv9gpWJTH .icon-shape .label{text-anchor:middle;}#mermaid-svg-TMv8IVnMv9gpWJTH .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-TMv8IVnMv9gpWJTH .rough-node .label,#mermaid-svg-TMv8IVnMv9gpWJTH .node .label,#mermaid-svg-TMv8IVnMv9gpWJTH .image-shape .label,#mermaid-svg-TMv8IVnMv9gpWJTH .icon-shape .label{text-align:center;}#mermaid-svg-TMv8IVnMv9gpWJTH .node.clickable{cursor:pointer;}#mermaid-svg-TMv8IVnMv9gpWJTH .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-TMv8IVnMv9gpWJTH .arrowheadPath{fill:#333333;}#mermaid-svg-TMv8IVnMv9gpWJTH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TMv8IVnMv9gpWJTH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TMv8IVnMv9gpWJTH .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TMv8IVnMv9gpWJTH .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-TMv8IVnMv9gpWJTH .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TMv8IVnMv9gpWJTH .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-TMv8IVnMv9gpWJTH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TMv8IVnMv9gpWJTH .cluster text{fill:#333;}#mermaid-svg-TMv8IVnMv9gpWJTH .cluster span{color:#333;}#mermaid-svg-TMv8IVnMv9gpWJTH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TMv8IVnMv9gpWJTH .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-TMv8IVnMv9gpWJTH rect.text{fill:none;stroke-width:0;}#mermaid-svg-TMv8IVnMv9gpWJTH .icon-shape,#mermaid-svg-TMv8IVnMv9gpWJTH .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-TMv8IVnMv9gpWJTH .icon-shape p,#mermaid-svg-TMv8IVnMv9gpWJTH .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-TMv8IVnMv9gpWJTH .icon-shape .label rect,#mermaid-svg-TMv8IVnMv9gpWJTH .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-TMv8IVnMv9gpWJTH .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-TMv8IVnMv9gpWJTH .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-TMv8IVnMv9gpWJTH :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-TMv8IVnMv9gpWJTH .base>*{fill:#9013FE!important;stroke:#5C00B3!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .base span{fill:#9013FE!important;stroke:#5C00B3!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .base tspan{fill:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .use>*{fill:#42A5F5!important;stroke:#1565C0!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .use span{fill:#42A5F5!important;stroke:#1565C0!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .use tspan{fill:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .avoid>*{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .avoid span{fill:#FF5252!important;stroke:#C62828!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .avoid tspan{fill:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .opt>*{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .opt span{fill:#66BB6A!important;stroke:#2E7D32!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .opt tspan{fill:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .tool>*{fill:#FFA726!important;stroke:#E65100!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .tool span{fill:#FFA726!important;stroke:#E65100!important;color:#fff!important;}#mermaid-svg-TMv8IVnMv9gpWJTH .tool tspan{fill:#fff!important;} 基础
避坑
优化
顺序
进阶
实战
聚簇 vs 非聚簇

(结构)
索引语法 CRUD

(会用)
失效 10 大场景

(避坑)
覆盖索引

(提速)
最左前缀

(顺序)
索引下推 ICP

(优化)
EXPLAIN 实战

(终极武器)


十、5 个常见踩坑

# 踩坑 现象 解法
1 UUID 做主键 B+Tree 频繁分裂,插入慢 用自增 BIGINT
2 SELECT * 几乎必然回表 只查需要的字段
3 WHERE 上做函数 YEAR(create_time)=2024 失效 改 BETWEEN
4 联合索引顺序错 高频字段不在最左 重新建索引
5 小表也建索引 优化器主动放弃,浪费空间 小表不用建

十一、6 步索引优化路径

#mermaid-svg-DEPDyNAgIYiL1RrS{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DEPDyNAgIYiL1RrS .error-icon{fill:#552222;}#mermaid-svg-DEPDyNAgIYiL1RrS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DEPDyNAgIYiL1RrS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DEPDyNAgIYiL1RrS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DEPDyNAgIYiL1RrS .marker.cross{stroke:#333333;}#mermaid-svg-DEPDyNAgIYiL1RrS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DEPDyNAgIYiL1RrS p{margin:0;}#mermaid-svg-DEPDyNAgIYiL1RrS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DEPDyNAgIYiL1RrS .cluster-label text{fill:#333;}#mermaid-svg-DEPDyNAgIYiL1RrS .cluster-label span{color:#333;}#mermaid-svg-DEPDyNAgIYiL1RrS .cluster-label span p{background-color:transparent;}#mermaid-svg-DEPDyNAgIYiL1RrS .label text,#mermaid-svg-DEPDyNAgIYiL1RrS span{fill:#333;color:#333;}#mermaid-svg-DEPDyNAgIYiL1RrS .node rect,#mermaid-svg-DEPDyNAgIYiL1RrS .node circle,#mermaid-svg-DEPDyNAgIYiL1RrS .node ellipse,#mermaid-svg-DEPDyNAgIYiL1RrS .node polygon,#mermaid-svg-DEPDyNAgIYiL1RrS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DEPDyNAgIYiL1RrS .rough-node .label text,#mermaid-svg-DEPDyNAgIYiL1RrS .node .label text,#mermaid-svg-DEPDyNAgIYiL1RrS .image-shape .label,#mermaid-svg-DEPDyNAgIYiL1RrS .icon-shape .label{text-anchor:middle;}#mermaid-svg-DEPDyNAgIYiL1RrS .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DEPDyNAgIYiL1RrS .rough-node .label,#mermaid-svg-DEPDyNAgIYiL1RrS .node .label,#mermaid-svg-DEPDyNAgIYiL1RrS .image-shape .label,#mermaid-svg-DEPDyNAgIYiL1RrS .icon-shape .label{text-align:center;}#mermaid-svg-DEPDyNAgIYiL1RrS .node.clickable{cursor:pointer;}#mermaid-svg-DEPDyNAgIYiL1RrS .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DEPDyNAgIYiL1RrS .arrowheadPath{fill:#333333;}#mermaid-svg-DEPDyNAgIYiL1RrS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DEPDyNAgIYiL1RrS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DEPDyNAgIYiL1RrS .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DEPDyNAgIYiL1RrS .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DEPDyNAgIYiL1RrS .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DEPDyNAgIYiL1RrS .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DEPDyNAgIYiL1RrS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DEPDyNAgIYiL1RrS .cluster text{fill:#333;}#mermaid-svg-DEPDyNAgIYiL1RrS .cluster span{color:#333;}#mermaid-svg-DEPDyNAgIYiL1RrS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DEPDyNAgIYiL1RrS .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DEPDyNAgIYiL1RrS rect.text{fill:none;stroke-width:0;}#mermaid-svg-DEPDyNAgIYiL1RrS .icon-shape,#mermaid-svg-DEPDyNAgIYiL1RrS .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DEPDyNAgIYiL1RrS .icon-shape p,#mermaid-svg-DEPDyNAgIYiL1RrS .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DEPDyNAgIYiL1RrS .icon-shape .label rect,#mermaid-svg-DEPDyNAgIYiL1RrS .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DEPDyNAgIYiL1RrS .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DEPDyNAgIYiL1RrS .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DEPDyNAgIYiL1RrS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-DEPDyNAgIYiL1RrS .step>*{fill:#F3E5F5!important;stroke:#9013FE!important;color:#333!important;}#mermaid-svg-DEPDyNAgIYiL1RrS .step span{fill:#F3E5F5!important;stroke:#9013FE!important;color:#333!important;}#mermaid-svg-DEPDyNAgIYiL1RrS .step tspan{fill:#333!important;} 第 1 步

查 slow log

找慢 SQL
第 2 步

EXPLAIN

看 type/key/rows
第 3 步

建合适索引

(高频/等值/范围)
第 4 步

避免失效

(函数/类型/左模糊)
第 5 步

覆盖索引

(不回表)
第 6 步

回归 EXPLAIN

对比前后

  1. 第 1 步:查 slow log 找慢 SQL
  2. 第 2 步:EXPLAIN 看 type / key / rows
  3. 第 3 步:建合适索引(高频 / 等值 / 范围顺序)
  4. 第 4 步:避免失效(不用函数 / 不做类型转换 / 不左模糊)
  5. 第 5 步:覆盖索引(不回表)
  6. 第 6 步:回归 EXPLAIN 对比前后

十二、推荐阅读

如果你想深入学 MySQL 索引,这几本 / 这些资料值得读:

  • 📚 《高性能 MySQL》(Baron Schwartz 等)------ MySQL 性能圣经
  • 📚 《MySQL 是怎样运行的》(小孩子 4919)------ 国产神书,从根上理解 MySQL
  • 📖 MySQL 官方文档dev.mysql.com)------ 永远的第一手资料
  • 📖 EXPLAIN 官方文档------ 字段权威解释
  • 🔗 极客时间《MySQL 实战 45 讲》(林晓斌)------ 阿里专家讲解

十三、附录:一句话总结各核心

核心 一句话
聚簇索引 InnoDB 数据 = 主键 = 聚簇索引,选对主键成功一半
索引语法 建索引 1 行 SQL 容易,用对索引才是真功夫
失效 10 大场景 索引失效 90% 是"用错"------最左前缀、类型转换、函数运算
覆盖索引 不加机器、不改代码,就快一倍
最左前缀 联合索引的顺序是性能的关键------顺序不对,索引等于白建
索引下推 MySQL 优化器的"自动挡"------默认开启,帮你省回表
EXPLAIN 调优 EXPLAIN 是慢 SQL 的 X 光机------不会看,调优就是盲改
相关推荐
渣渣灰飞1 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第六章:Redis 实现登录 Token
学习·mysql·缓存
渣渣灰飞2 小时前
MySQL 系统学习 第六阶段:Redis + 缓存 + 高并发设计 第五章:缓存穿透、缓存击穿、缓存雪崩
学习·mysql·缓存
念何架构之路2 小时前
Docker 容器状态机 学习
java·学习·docker
你有我备注吗2 小时前
SQL学习之查询
java·sql·学习
从零开始的代码生活_2 小时前
C++ stack、queue 与 priority_queue:容器适配器原理与实战
开发语言·c++·后端·学习·算法
铅笔侠_小龙虾2 小时前
Rust 学习(6)-所有权规则、移动语义、Clone 与 Copy
python·学习·rust
kiss strong2 小时前
AI学习-langchain
学习·langchain
蓝速科技3 小时前
蓝速科技鸿蒙广告机替代安卓实测:信创系统下的性能与边界评估
android·科技·harmonyos
雅客李3 小时前
2026云手机高负载压力测评 安卓云手机多开实测数据
android·智能手机·php