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

SQL性能优化:让查询快10倍的8个实战技巧(2026版)

学习是为了不落后整理则是为了不忘记。这是我在数据分析这行干了近10年的体会。SQL写得烂不只是慢是浪费公司的钱——你多跑1小时的查询集群就多烧1小时的钱。2026年了AI能帮你写SQL但AI写出来的SQL不一定快。今天船长把压箱底的8个优化技巧全拆给你看每个都有真实案例直接复制就能用。一、EXPLAIN先看执行计划别猜90%的SQL性能问题EXPLAIN一眼就能看出来。但很多人习惯改了再跑跑完再说。正确姿势EXPLAIN ANALYZESELECT u.name, COUNT(o.id) AS order_countFROM users uLEFT JOIN orders o ON u.id o.user_idWHERE u.created_at 2026-01-01GROUP BY u.id, u.name;看三个指标Seq Scan vs Index Scan有没有走索引、rows estimated vs rows actual预估行数准不准、execution time总耗时。实战案例一个用户画像查询从12秒优化到0.3秒就是因为EXPLAIN发现走了全表扫描加了个组合索引就解决了。二、索引不是越多越好组合索引有讲究见过有人给表加了20个索引结果INSERT比SELECT还慢。索引是双刃剑写快了读就慢读快了写就慢。组合索引的黄金法则最左前缀匹配-- 建索引CREATE INDEX idx_user_status_date ON orders(user_id, status, created_at);-- ✅ 能命中索引WHERE user_id 123 AND status paidWHERE user_id 123-- ❌ 不能命中索引跳过了最左列WHERE status paid AND created_at 2026-01-01船长经验单表索引不超过5个组合索引列数不超过3列。超过这个数说明你的表设计有问题。三、子查询改成JOIN性能差10倍这是新手最常犯的错。子查询在MySQL 5.6之前每执行一次就是一次全表扫描改成JOIN可以直接走索引。慢写法子查询SELECT * FROM ordersWHERE user_id IN (SELECT id FROM users WHERE city 北京);快写法JOINSELECT o.* FROM orders oINNER JOIN users u ON o.user_id u.idWHERE u.city 北京;实测数据一个100万行的订单表子查询耗时3.2秒JOIN只用了0.15秒差了21倍。四、避免SELECT *只查需要的列SELECT * 看着方便但后果很严重①网络传输量暴增 ②无法使用覆盖索引 ③回表次数增加。覆盖索引的威力如果你的查询只涉及索引列数据库直接从索引返回数据不需要回表查数据行。这个优化在某些场景下可以快100倍。-- 假设有索引 idx_user_name_age(user_id, name, age)-- ✅ 覆盖索引不需要回表SELECT user_id, name, age FROM users WHERE user_id 123;-- ❌ 多查了一列必须回表SELECT user_id, name, age, email FROM users WHERE user_id 123;五、LIKE模糊查询的坑LIKE %关键词和LIKE %关键词%都会导致索引失效触发全表扫描。解决方案① 前缀匹配可以用索引LIKE 关键词%② 全文检索用全文索引MySQL的FULLTEXT或Elasticsearch③ 精确匹配用等号 关键词实战案例一个商品搜索接口原来用LIKE %手机%500万商品表查询耗时8秒。改用MySQL FULLTEXT索引后查询降到0.05秒。六、分页查询的深分页问题LIMIT 100000, 20这种写法数据库要先查出100020行再丢弃前100000行。越往后翻越慢。优化方案游标分页-- ❌ 深分页查100万行只要最后20行SELECT * FROM orders ORDER BY id LIMIT 1000000, 20;-- ✅ 游标分页只查大于上一页最后一条ID的记录SELECT * FROM orders WHERE id 1000000 ORDER BY id LIMIT 20;实测数据1000万行订单表OFFSET分页第50页耗时2.3秒游标分页始终在0.01秒。七、批量INSERT代替逐条INSERTinserting 1万条数据逐条INSERT要30秒批量INSERT只要0.5秒。-- ❌ 逐条插入循环1万次INSERT INTO logs (user_id, action) VALUES (1, click);-- ✅ 批量插入一次1千条INSERT INTO logs (user_id, action) VALUES(1, click), (2, view), (3, click), ...;船长经验批量大小控制在500-1000条/次太大可能触发MySQL的max_allowed_packet限制。八、用窗口函数替代自连接查每个部门的薪资最高的人老写法是自连接新写法用窗口函数ROW_NUMBER()。-- ❌ 自连接两次扫描同一张表SELECT e.* FROM employees eINNER JOIN (SELECT dept, MAX(salary) AS max_salFROM employees GROUP BY dept) m ON e.dept m.dept AND e.salary m.max_sal;-- ✅ 窗口函数一次扫描搞定WITH ranked AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY dept ORDER BY salary DESC) AS rnFROM employees)SELECT * FROM ranked WHERE rn 1;实测数据50万行员工表自连接耗时1.8秒窗口函数0.4秒快了4.5倍代码也更清晰。总结SQL优化检查清单✅ 1. 先EXPLAIN看执行计划别凭感觉✅ 2. 组合索引遵循最左前缀单表不超过5个✅ 3. 子查询改JOIN避免全表扫描✅ 4. 不用SELECT *善用覆盖索引✅ 5. LIKE前缀通配符走索引后缀不行✅ 6. 深分页用游标别用OFFSET✅ 7. 批量INSERT每次500-1000条✅ 8. 窗口函数替代自连接 数据来源个人工作记录统计2024-2026年数据分析项目实战测试环境为MySQL 8.0表数据量100万-1000万行。你在工作中遇到过哪些SQL性能坑评论区聊聊船长帮你看看。

相关文章:

SQL性能优化:让查询快10倍的8个实战技巧(2026版)

学习是为了不落后,整理则是为了不忘记。这是我在数据分析这行干了近10年的体会。SQL写得烂,不只是慢,是浪费公司的钱——你多跑1小时的查询,集群就多烧1小时的钱。2026年了,AI能帮你写SQL,但AI写出来的SQL不…...

容器日志还在切窗口查?VSCode 2026实时查看已支持结构化JSON高亮+错误自动聚类(仅限Insiders 2026.2+)

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026容器日志实时查看功能概览 VSCode 2026 引入了原生集成的容器日志流式监听机制,无需额外安装扩展即可在内置终端或专用日志面板中实时捕获 Docker、Podman 及 Kubernetes Pod 的…...

QuantLib C++金融库VSCode调试全链路打通,从源码级断点到PnL敏感度热重载,仅需7分钟

更多请点击: https://intelliparadigm.com 第一章:QuantLib C金融库VSCode调试全链路打通,从源码级断点到PnL敏感度热重载,仅需7分钟 在量化交易系统开发中,QuantLib 的 C 原生实现提供了高精度定价与风险引擎&#x…...

Linux -- 信号量

信号量⭐:同步与互斥核心1. 作用解决进程 / 线程同步、互斥问题保护临界资源(同一时间只允许一个进程访问)2. 本质受保护的整数计数器操作是原子性的,不可中断3. 两种信号量二值信号量(0/1):互斥…...

【VSCode容器化配置终极指南】:20年DevOps专家亲授,5步实现跨团队环境零差异开发

更多请点击: https://intelliparadigm.com 第一章:VSCode容器化配置的核心价值与适用场景 VSCode 的容器化配置(Remote-Containers 扩展)将开发环境封装进 Docker 容器,实现“一次定义、随处运行”的可复现开发体验。…...

Python 协程任务异常处理机制

Python协程任务异常处理机制探析 在异步编程中,协程任务的高效执行离不开完善的异常处理机制。Python通过asyncio库提供了强大的协程支持,但任务执行过程中的异常若未妥善处理,可能导致程序崩溃或资源泄露。本文将深入探讨协程任务的异常处理…...

AAEON无风扇触控面板电脑在工业自动化中的应用

1. 产品概述:AAEON ACP-2106/2076无风扇触控面板电脑在工业自动化和数字标牌领域,设备需要兼顾性能与可靠性。AAEON推出的ACP-2106(10.1英寸)和ACP-2076(7英寸)两款无风扇触控面板电脑,搭载Inte…...

JVM 调优实战指南

系列导读:本篇将深入讲解 JVM 调优的核心原理与实战技巧。 文章目录目录一、JVM 内存模型1.1 内存结构1.2 内存参数二、垃圾回收器2.1 GC 对比2.2 G1 配置2.3 ZGC 配置三、调优参数3.1 内存配置3.2 GC 配置3.3 日志配置四、问题诊断4.1 常用工具4.2 OOM 排查4.3 CPU…...

日志平台架构设计

系列导读:本篇将深入讲解日志平台的架构设计与核心实现。 文章目录目录一、日志平台概述1.1 日志类型1.2 日志平台功能二、架构设计2.1 整体架构2.2 技术选型三、ELK 实战3.1 Filebeat 配置3.2 Logstash 配置3.3 Docker Compose 部署四、最佳实践4.1 日志规范4.2 日…...

告别漫画加载烦恼:picacomic-downloader 漫画下载器终极指南

告别漫画加载烦恼:picacomic-downloader 漫画下载器终极指南 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://gitcode.c…...

如何在响应式网页中水平居中表单(CSS 绝对定位居中方案)

...

如何在 Go 中安全复制接口指针所指向的值

...

BetterNCM Installer:为什么你的网易云音乐需要这个插件管理器?

BetterNCM Installer:为什么你的网易云音乐需要这个插件管理器? 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗?…...

AI 英语学习智能体的功能

针对 AI 英语学习智能体的功能设计,为了实现从“知识输入”到“能力输出”的闭环,可以将功能划分为五个核心维度。这种设计不仅涵盖了听说读写,还通过底层数据流将各个孤岛连接起来。1. 代理式沉浸口语导师这是智能体的核心交互入口&#xff…...

西交大开源PAS3R|1000帧长视频流式3D 重建新SOTA,彻底解决轨迹漂移!

点击下方卡片,关注「3D视觉工坊」公众号选择星标,干货第一时间送达来源:3D视觉工坊「3D视觉从入门到精通」知识星球(点开有惊喜) !星球内有20多门3D视觉系统课程、3DGS独家系列视频教程、顶会论文最新解读、海量3D视觉行业源码、项…...

C++26反射元编程成本封顶术:4种编译期剪枝模式+1个编译器补丁级优化,已获ISO WG21非正式采纳

更多请点击: https://intelliparadigm.com 第一章:C26反射元编程成本封顶术全景导览 C26 正式引入静态反射(std::reflexpr)与编译期计算增强机制,使元编程从“类型推导黑箱”迈向“可审计、可截断、可封顶”的新范式。…...

潮乎盲盒商城开源源码|支持H5+小程序+APP三端打包|Laravel+UniApp架构

温馨提示:文末有联系方式潮乎盲盒商城全平台开源源码发布 本套潮乎盲盒商城系统提供完整可商用级源码,全面支持H5网页端、小程序及原生APP(通过UniApp跨端打包)三端部署,开箱即用,无二次限制。技术架构说明…...

容器日志总在延迟?VSCode 2026实时查看全链路优化指南,从毫秒级卡顿到亚秒级响应

更多请点击: https://intelliparadigm.com 第一章:容器日志延迟的底层归因与VSCode 2026日志架构演进 容器日志延迟并非孤立现象,其根源深植于 Linux 内核 I/O 调度、容器运行时(如 containerd)的日志驱动缓冲策略&a…...

CSS如何实现Bootstrap进度条自定义动画_利用keyframe关键帧

...

VSCode 2026量子语法高亮上线倒计时:微软QDK团队亲授3个未文档化API钩子,现在配置可提前解锁2027年特性预览通道

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026量子编程语法高亮的架构演进与技术定位 VSCode 2026 引入了原生支持量子计算语言(如 Q#、OpenQASM 3.0 和 Quil)的语法高亮引擎,其核心并非简单扩展 Tex…...

RP2040实现I2C-USB桥接:低成本传感器数据采集方案

1. 项目概述:RP2040变身I2C-USB桥接器 去年在调试一个环境监测项目时,我遇到了一个棘手问题:需要将多个I2C传感器(温湿度、气压、空气质量)的数据实时采集到笔记本电脑进行分析,但手头的开发板没有USB主机…...

NVIDIA Nemotron如何优化RAG系统的查询重写技术

1. RAG系统面临的挑战与NVIDIA Nemotron的解决方案 检索增强生成(RAG)系统在实际应用中面临的核心难题是用户查询的模糊性和隐含意图。当用户提出"告诉我NVIDIA NeMo模型训练的最新更新"这样的问题时,系统很难准确判断用户真正关心…...

DeepSeek V4写论文不被检测攻略,2026年4月3款工具配

DeepSeek V4 在 2026 年 4 月 24 日刚发布,写出来的论文比 V3 顺多了,但 AI 率却没真正降下去。很多人把生成的稿子直接交上去,知网、维普、万方一查,AIGC 疑似度 50% 起步,不少人甚至冲到 70%。这篇是 2026 年 4 月最…...

DeepSeek V4降AI完全手册,2026年4月从0到95分实测

DeepSeek V4 在 2026-04-24 凌晨发布,写论文的同学群里直接炸了。新版本的语义连贯性比 V3 提升了一个台阶,写出来的段落读起来更顺,但也带来一个让人头疼的副作用:AI 痕迹更整齐、更规整,知网 AIGC 检测命中率明显上升…...

DeepSeek V4降AI痕迹避坑指南,2026年4月8个常见错误

DeepSeek V4降AI痕迹避坑指南,2026年4月8个常见错误 DeepSeek V4 在 2026 年 4 月 24 日正式发布,新版本的语言流畅度比 V3 又上了一个台阶,但也因此让"AI 痕迹"问题变得更隐蔽。很多同学拿 DeepSeek V4 写完论文,第一次…...

终极解决方案:如何用MaaAssistantArknights实现游戏日常任务自动化

终极解决方案:如何用MaaAssistantArknights实现游戏日常任务自动化 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址:…...

SWE-agent:基于LLM的自主代码修复智能体实战指南

1. 从GitHub问题到自动修复:SWE-agent深度解析与实战 如果你是一名开发者,每天打开GitHub看到待处理的issue列表,是不是偶尔会想,要是能有个“数字实习生”自动把这些bug修了该多好?或者,作为一名安全研究…...

OpenRGB终极指南:一个软件统一控制所有RGB设备,告别多软件混乱时代

OpenRGB终极指南:一个软件统一控制所有RGB设备,告别多软件混乱时代 【免费下载链接】OpenRGB Open source RGB lighting control that doesnt depend on manufacturer software. Supports Windows, Linux, MacOS. Mirror of https://gitlab.com/CalcProg…...

基于LLM的浏览器智能体Index:从原理到实战部署指南

1. 项目概述:一个能“看懂”网页并自主操作的AI智能体 最近在折腾AI自动化工具,发现了一个让我眼前一亮的开源项目—— Index 。简单来说,它是一个 基于大语言模型(LLM)的浏览器智能体 。你可以把它理解为一个拥有…...

3个步骤彻底解决Android应用下载安全隐患:APKMirror客户端深度解析

3个步骤彻底解决Android应用下载安全隐患:APKMirror客户端深度解析 【免费下载链接】APKMirror 项目地址: https://gitcode.com/gh_mirrors/ap/APKMirror 在Android生态中,你是否曾为寻找安全可靠的应用下载渠道而烦恼?面对网络上良莠…...