数据库索引优化,后端性能提升第一课
一个查询从毫秒变成几秒十有八九是索引出了问题。很多后端开发者习惯把性能瓶颈归咎于代码逻辑、缓存缺失或机器配置却忽略了最基础也最致命的一环——数据库索引。索引用对了查询效率提升百倍用错了不仅无效还会拖慢写入。这篇文章不谈玄学只讲实战中必须掌握的索引优化要点。索引的本质是空间换时间没有索引时数据库只能全表扫描逐行比对。数据量小的时候无所谓一旦表里几十万、上百万行全表扫描就是灾难。索引相当于书的目录通过预先排序的数据结构让数据库快速定位目标行。MySQL默认使用B树原因是它矮胖、磁盘IO少、范围查询友好。B树非叶子节点只存键值叶子节点存数据并形成链表所以既能快速等值查找也能高效范围扫描。聚簇索引与非聚簇索引的代价InnoDB的聚簇索引把数据行存在主键索引的叶子节点上也就是说表本身就是按主键组织的一棵B树。二级索引的叶子节点存的是主键值查二级索引拿到主键后再回聚簇索引取完整行这个过程叫“回表”。回表是性能杀手。如果查询只需要二级索引里已有的字段就不需要回表这就是覆盖索引。比如在user表上建了(name, age)联合索引查询select name, age from user where name 张三直接走索引就能拿到数据无需回表。联合索引与最左前缀原则联合索引(a, b, c)相当于按a排序a相同再按bb相同再按c。查询条件必须从最左列开始连续匹配否则索引失效。where a1 and b2能用where b2不能用where a1 and c3只能用到a列。范围查询会中断后续列的使用比如where a1 and b2 and c3c列用不上索引。设计联合索引时把等值查询的列放前面范围查询的列放后面这是基本口诀。索引失效的常见陷阱在索引列上做运算或函数操作比如where year(create_time)2024索引直接废掉应改成where create_time between 2024-01-01 and 2024-12-31。隐式类型转换同样致命字符串列用数字查询比如where phone13800000000如果phone是varcharMySQL会把列转成数字再比较索引失效。like %张前置通配符无法走索引like 张%可以。or连接非索引列、not in、!也容易导致全表扫描。用EXPLAIN看清真相别猜用EXPLAIN看执行计划。重点关注type列ALL是全表扫描index是全索引扫描range是范围扫描ref是非唯一索引查找eq_ref是唯一索引查找const是常量查找。目标是至少达到range最好ref以上。key列显示实际使用的索引rows列估算扫描行数Extra里出现Using filesort或Using temporary说明需要优化排序和分组。Using index表示覆盖索引是好信号。索引不是越多越好每个索引都要占用磁盘空间写入时还要维护B树降低插入、更新、删除的速度。一张表建五六个索引写入性能可能下降一半。原则是高频查询字段建索引区分度高的字段建索引联合索引能覆盖多个查询场景就不要再建单列索引。定期用SHOW INDEX和慢查询日志审查冗余索引把不用的删掉。索引优化是后端性能提升的第一课也是性价比最高的一课。不写代码不改架构只调整几个索引查询就能从秒级降到毫秒级。但索引不是银弹它需要你理解查询模式、数据分布和数据库原理。多写EXPLAIN多看慢日志少凭感觉建索引。性能优化没有捷径只有对细节的持续较真。

相关新闻

多租户场景下 OpenClaw 资源隔离与公平调度:TaoToken 统一 Key 通道的 cgroup 落地实践

多租户场景下 OpenClaw 资源隔离与公平调度:TaoToken 统一 Key 通道的 cgroup 落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:30:34 阅读更多 →
嵌入式开发中的 FreeRTOS:从入门到实战

嵌入式开发中的 FreeRTOS:从入门到实战

1. 引言 在嵌入式开发领域,实时操作系统(RTOS)已经成为复杂项目不可或缺的基石。随着物联网设备、智能硬件和工业控制系统的功能日益丰富,传统的裸机编程(前后台循环)逐渐暴露出响应不及时、任务调度困难、…

2026/10/3 19:30:33 阅读更多 →
PyTorch转ONNX踩坑实录:spectral_norm、torch.mv与torch.dot的导出问题与TaoToken调试实践

PyTorch转ONNX踩坑实录:spectral_norm、torch.mv与torch.dot的导出问题与TaoToken调试实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 19:30:33 阅读更多 →

最新新闻

DeepSeek Harness 开源贡献手记:从零到合入主线

DeepSeek Harness 开源贡献手记:从零到合入主线

1. 引言:为什么参与开源贡献 本文记录我参与 DeepSeek Harness 开源项目的完整过程,从发现问题、定位源码、编写补丁到最终合入主线的真实经历,希望能为同样想参与开源贡献的开发者提供一份可参考的路线图。 2. 项目背景与初步调研 在动手…

2026/10/3 20:40:42 阅读更多 →
面试官:MySQL中的 distinct 和 group by 哪个效率更高?

面试官:MySQL中的 distinct 和 group by 哪个效率更高?

一、开篇:一道高频面试题背后的问题在 MySQL 相关的面试中,有一道题经常被面试官问到:distinct 和 group by 都能去重,它们哪个效率更高?很多候选人听到这个问题后会下意识地回答「distinct 更快,因为它的语…

2026/10/3 20:40:42 阅读更多 →
面试官:BIO、NIO、AIO 的区别是什么?

面试官:BIO、NIO、AIO 的区别是什么?

一、开篇:从一个面试场景说起面试官经常会抛出一个看似简单、实则非常考察底层功底的题目:「说说 BIO、NIO、AIO 的区别」。很多同学能背出「BIO 是阻塞、NIO 是非阻塞、AIO 是异步非阻塞」,但如果继续追问「为什么 NIO 是非阻塞的」「底层分…

2026/10/3 20:40:41 阅读更多 →
Python实现绘制同切圆

Python实现绘制同切圆

程序源码:# 绘制同切圆 import turtle as t # 导入turtle绘图库,取别名t t.pensize(3) # 设置画笔粗细为3像素 t.circle(10) # 画半径为10的圆 t.circle(20) # 画半径为20的圆 t.circle(40) …

2026/10/3 20:39:41 阅读更多 →
数据管理与论文写作并行:按阶段推进的研究节奏怎么排

数据管理与论文写作并行:按阶段推进的研究节奏怎么排

数据工作和论文写作挤在同一段时间里,几乎是每位研究生都会遇到的排期难题。多数人卡住的不是不会写,而是两条线的节拍没有对齐。我们在梳理用户反馈时发现,把研究数据与论文写作按成熟度切成四段、给每段设定明确的两线配比,返工…

2026/10/3 20:39:41 阅读更多 →
双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍

双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍

文章目录 一、TCP双向分流里的FIN 1.FIN信息 1.1放置FIN 1.1.1处前预剩发 1.1.2处后被遗漏 1.2发送FIN 1.2.1剩余已发完 1.2.2独立仍接收 1.3接收FIN 1.3.1现在已收完 1.3.2独立仍在发 二、数据的需求与TCB的服务 1.数据需求TCB的发收服务 1.1需本端TCB可靠发送 …

2026/10/3 20:39:40 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →