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

数据库优化:从慢查询到索引,让系统快 10 倍

数据库优化从慢查询到索引让系统快 10 倍在2026年的今天尽管硬件性能飞速提升内存价格日益低廉但**数据库Database**依然是绝大多数系统架构中的性能瓶颈。无论你的微服务拆分得多么细致缓存策略多么花哨一旦数据库层面出现“慢查询”整个系统就会像被掐住脖子的巨人瞬间瘫痪。很多开发者认为优化数据库就是“加索引”这其实是一个巨大的误区。真正的数据库优化是一场从SQL编写、索引设计、架构调整到参数调优的系统工程。本文将带你深入数据库内核揭秘如何让系统响应速度提升10倍甚至百倍。一、诊断先行不要盲目优化在动手之前必须先找到“病灶”。盲目加索引不仅可能无效还会拖慢写入速度。1. 开启慢查询日志Slow Query Log这是最基础也最有效的手段。MySQL: 设置long_query_time如0.5秒记录所有执行超过该时间的SQL。PostgreSQL: 配置log_min_duration_statement。关键点: 不仅要记录执行时间长的还要记录未走索引的查询即使它很快数据量大了也会变慢。2. 善用 EXPLAIN 命令拿到一条慢SQL第一件事不是改代码而是运行EXPLAIN your_sql。重点关注以下字段type: 访问类型。性能从好到坏依次为systemconsteq_refrefrangeindexALL。目标: 至少达到range杜绝ALL全表扫描。key: 实际使用的索引。如果是NULL说明没用到索引。rows: 预计扫描的行数。这是最直观的指标从10万行降到10行性能提升立竿见影。Extra: 额外信息。Using filesort: 需要额外的排序操作性能杀手需优化。Using temporary: 使用了临时表通常出现在GROUP BY或DISTINCT时需警惕。Using index condition: 覆盖索引性能极佳。二、索引艺术不仅仅是 B 树索引是数据库优化的核心但用错了就是灾难。1. 最左前缀原则Leftmost Prefixing对于联合索引(a, b, c)✅WHERE a1 AND b2(走索引)✅WHERE a1(走索引)❌WHERE b2(不走索引)❌WHERE a1 AND c3(只用到ac用不到)实战技巧: 将区分度高基数大的列放在联合索引的最左边。2. 覆盖索引Covering Index如果查询的列都在索引中数据库无需“回表”回到主键索引查数据性能提升巨大。场景:SELECT id, name FROM users WHERE age 20;优化: 建立(age, name, id)联合索引。效果: 避免随机IO将磁盘读取转为顺序读取。3. 索引下推ICP, Index Condition Pushdown在MySQL 5.6中引擎层会先过滤索引能判断的条件再回表。场景:WHERE name LIKE 张% AND age 20。如果只有name索引旧版本会回表后再判断age新版本会在索引层先判断name减少回表次数。4. 避坑指南不要在索引列上做运算:WHERE YEAR(create_time) 2026会导致索引失效。应改为范围查询WHERE create_time BETWEEN 2026-01-01 AND 2026-12-31。隐式类型转换: 字符串字段不加引号WHERE phone 13800000000会导致全表扫描。模糊查询开头通配符:LIKE %abc无法利用索引。如需此类搜索请引入Elasticsearch。索引并非越多越好: 每个索引都会占用磁盘空间并降低INSERT/UPDATE/DELETE的速度。单表索引建议不超过5-6个。三、SQL 重写代码层面的降维打击很多时候慢查询是因为SQL写得太“笨”。1. 拒绝SELECT *原因: 增加网络传输开销无法利用覆盖索引增加内存消耗。做法: 只查需要的字段。2. 优化JOIN操作小表驱动大表: 确保JOIN时驱动表外层循环表的数据量尽可能小。关联字段类型一致: 两个表关联的字段必须类型、字符集完全一致否则索引失效。避免多表大连接: 在微服务架构下尽量在应用层组装数据或者通过冗余字段减少JOIN。3. 分页优化深分页问题LIMIT 1000000, 10是经典的性能杀手。数据库需要扫描前100万行并丢弃。优化方案1 (延迟关联):-- 原句 SELECT * FROM orders LIMIT 1000000, 10; -- 优化先查ID再回表 SELECT o.* FROM orders o INNER JOIN (SELECT id FROM orders LIMIT 1000000, 10) tmp ON o.id tmp.id;优化方案2 (游标法/Seek Method): 记录上一页最大的ID下一页直接WHERE id last_max_id LIMIT 10。这在无限滚动加载场景中非常高效。4. 批量操作禁止在循环中单条插入/更新。使用INSERT INTO t VALUES (...), (...), (...)批量提交。对于大量更新考虑创建临时表导入再RENAME TABLE替换。四、架构演进当单机遇到瓶颈当SQL和索引优化到极致QPS依然扛不住时就需要架构层面的突破了。1. 读写分离Read/Write Splitting原理: 主库负责写多个从库负责读。注意: 存在主从延迟问题。对于强一致性场景如支付后查余额必须强制读主库。2. 分库分表Sharding垂直分表: 将大字段如content,blob拆分到扩展表主表只留热点字段提高内存命中率。水平分表: 按user_id或time将数据分散到多个物理表/库中。工具: ShardingSphere, MyCat。代价: 跨分片查询复杂事务处理困难。不到亿级数据量不要轻易分库分表。3. 引入缓存Cache Aside PatternRedis/Memcached: 将热点数据放入内存。策略: 先读缓存命中返回未命中读DB写入缓存并返回。陷阱: 缓存穿透查不存在的数据、缓存击穿热点Key过期、缓存雪崩大量Key同时过期。需配合布隆过滤器、逻辑过期、随机TTL等策略。4. 冷热数据分离将历史订单、旧日志归档到“冷库”低成本存储或HBase/TiDB主库只保留最近3-6个月的“热数据”。这能显著减小主表体积提升索引效率。五、硬件与参数最后的防线如果以上都做了还是慢可能需要调整底层配置。innodb_buffer_pool_size: MySQL最重要的参数。建议设置为物理内存的 50%-70%让热点数据和索引尽可能驻留内存。磁盘IO: 机械硬盘HDD是数据库的天敌。务必使用NVMe SSD。IO等待iowait高通常是磁盘瓶颈。连接池: 合理配置应用端的数据库连接池如HikariCP。连接数过少导致排队过多导致上下文切换频繁。通常设置为CPU核数 * 2 1或根据压测结果调整。结语优化是一个闭环数据库优化不是一次性的任务而是一个监控 - 分析 - 优化 - 验证的持续闭环。监控: 部署 Prometheus Grafana实时监控 QPS、TPS、慢查询数、锁等待时间。分析: 定期Review慢查询日志分析Top 10慢SQL。优化: 针对性地加索引、改SQL、做缓存。验证: 在预发环境进行压测确认优化效果且无副作用。记住最快的查询是不查询缓存次快的查询是走索引最慢的查询是全表扫描。作为后端工程师心中要有B树手下要有执行计划才能让系统在海量数据下依然健步如飞。行动清单打开你的生产库慢查询日志找出耗时最长的3条SQL。对它们执行EXPLAIN看看是否有ALL或Using filesort。检查是否有SELECT *的习惯立刻改掉。评估核心表的buffer_pool命中率如果低于95%考虑加内存。现在就去让你的数据库“飞”起来吧

相关文章:

数据库优化:从慢查询到索引,让系统快 10 倍

数据库优化:从慢查询到索引,让系统快 10 倍在2026年的今天,尽管硬件性能飞速提升,内存价格日益低廉,但**数据库(Database)**依然是绝大多数系统架构中的性能瓶颈。无论你的微服务拆分得多么细致…...

探索配电网有功电压控制的多智能体强化学习之旅

基于配电网有功电压控制的多智能体强化学习,python代码,可以发中文核心或者中文ei,非常好的代码!在电力系统领域,配电网的有功电压控制一直是个关键且富有挑战的课题。随着技术的发展,多智能体强化学习逐渐…...

mes系统排名

在当前制造业数字化转型的大潮中,MES系统作为连接计划层与控制层的桥梁,其重要性日益凸显。然而,随着市场上MES系统的种类和数量激增,企业在选择时面临着诸多挑战。传统的选择标准往往忽略了中小制造企业的实际需求,导…...

实测3款主流论文降重工具!哪个网站更好用性价比更高?

实测3款主流论文降重工具!哪个网站更好用性价比更高? 最近后台快被私信炸毁了,清一色都是同一个问题:“论文重复率80%,学校用知网查,有没有靠谱的降重工具?”作为一个帮三个学弟学妹成功通过盲审…...

《尽管去做》

焦虑源于缺乏控制力、组织管理、准备与行动不足,要通过系统化的行动管理,实现头脑清醒、轻松掌控事务的心静如水高效状态,做到对事务既不反应过度,也不反应不足。管理的核心是管理行动,而非时间、信息或重要事项&#…...

莱文斯坦距离基本原理

关键词:Levenshtein Distance 一、说明 莱文斯坦距离是用于衡量两个序列之间差异的字符串度量计算将一个字符串转换为另一个字符串所需的最少单字符编辑次数——插入、删除或替换。该算法由弗拉基米尔列文斯坦于1965年开发,广泛应用于拼写检查器、DNA分析…...

低空经济浪潮下的无人机结构设计与散热解决方案

🎓作者简介:科技自媒体优质创作者 🌐个人主页:莱歌数字-CSDN博客 💌公众号:莱歌数字(B站同名) 📱个人微信:yanshanYH 211、985硕士,从业16年 从…...

在线问诊系统, 在线问诊平台, 互联网医院,2026java毕业设计项目, 简历项目, 个人学习项目

这是我们码上启航平台的一个新的原创项目【在线问诊平台】。项目是基于SpringBoot3vue3的前后端分离项目,该项目提供完整源代码SQL 脚本核心流程图和文档。可访问码上启航平台以获得“在线问诊平台”项目的源代码 一、项目功能描述 线上问诊系统是一个基于Web的在线…...

基于最小二乘支持向量机(LSSVM)的多输出数据回归预测

基于最小二乘支持向量机(LSSVM)的多输出数据回归预测 LSSVM多输出回归 matlab代码注:暂无Matlab版本要求 -- 推荐 2018B 版本及以上在数据处理与预测领域,最小二乘支持向量机(Least Squares Support Vector Machine, LSSVM)是一种…...

2026 年 3 月 15 日刷题

今天的题目是有关 BFS 广度优先搜索的。BFS 可以理解是从树的顶端一层一层往下逐层遍历。维护一个队列,在遍历过程中不断加入符合要求的元素,最后当队列为空时返回。207 课程表这道题目是拓扑排序,就是将一张有向无环图按照层次来遍历&#x…...

接收单元之变:SPAD-SoC如何重构激光雷达的“视网膜”

本文将从应用的角度出发,深入探讨SPAD-SoC在激光雷达中的技术原理、核心优势、面临挑战以及最新的产业化进展,论证为何SPAD-SoC是未来激光雷达接收单元不可逆转的发展方向。 01 接收单元技术谱系:从APD到SPAD-SoC 在深入讨论SPAD-SoC之前,我们有必要先厘清当前车载激光雷…...

2026年三防布批发TOP10企业揭晓,谁将领跑行业?

“老张,今年三防布的订单又爆了!”上周跟江苏南通做篷布批发的王老板吃饭,他举着手机给我看后台数据——单月出货量突破12万米,同比暴涨37%。这数据让我想起去年行业论坛上专家那句话:“2026年三防布市场规模将突破80亿…...

4节点光储直流微网:多目标控制下的光伏MPPT与储能双向DCDC的二次优化与多智能体一致性研究

4节点光储直流微网 领域:多目标控制、多智能体一致性、二次优化 15kW、400V级,阐述如下 : 光伏mppt:采用粒子群算法 储能双向DCDC: 电流内环采用模型预测控制 电压环采用分布式控制(含通讯) 初级控制采用下垂droop 二次控制采用差异性并加入电…...

CUDA编程学习(四)内存拷贝

本篇文章介绍如何把存储在主机内存上的数据拷贝到存储到设备显卡的内存上。我们将逐步分析代码&#xff0c;完整代码如下#include <cuda_runtime.h> #include "../common/common.h" #include <stdio.h>void initialData(float *ip,int size) {time_t t;s…...

2026多平台后台模板,包括:Html、Laravel、react、VUE、dotnet、angular

✨ 核心亮点✅ 全技术栈覆盖&#xff1a;囊括 Html 静态模板、Laravel 后端框架模板、React/VUE/Angular 前端框架模板、dotnet 微软系模板&#xff0c;一套搞定多场景开发&#xff1b;✅ 企业级标准&#xff1a;模板内置权限管理、数据可视化、表单校验、菜单路由等高频功能&a…...

基于MATLAB的Kmeans自动寻找最佳聚类中心App:‘手肘法‘确定k值与聚类结果可视化

基于MATLAB的Kmeans自动寻找最佳聚类中心App。 通过简单的界面操作&#xff0c;能够实现手肘法确定kmeans算法的最佳聚类数&#xff0c;并自动进行聚类&#xff0c;画图。 点击加载要聚类的数据——点击手肘法计算k值按键——根据生成的不同K值聚类偏差图&#xff0c;获得最佳聚…...

计算机毕业设计 java 虚拟股票交易系统 Java+SpringBoot 模拟股票交易平台 Web 版股市虚拟交易实训系统

计算机毕业设计 java 虚拟股票交易系统 z00to9&#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享金融投资学习需求增长&#xff0c;新手缺乏安全实操环境&#xff0c;真实股票交易风险高、体验差…...

计算机毕业设计springboot基于Java的高校毕业实习管理系统的设计与实现 基于SpringBoot的高校毕业生实习信息管理平台的设计与实现 基于Java技术的高校学生顶岗实习综合服务平台

计算机毕业设计springboot基于Java的高校毕业实习管理系统的设计与实现jctd2693 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。随着高等教育的普及&#xff0c;每年有大量的学生…...

基于PSCAD仿真研究:三相空载输电线路过电压保护与断路器分合闸策略分析

pscad仿真 采用pscad搭建220kv三相空载输电线路&#xff0c;仿真合空线&#xff0c;切空线过电压&#xff0c;仿真避雷器&#xff0c;合闸电阻法抑制合闸过电压&#xff0c;仿真控制断路器三相分别在线路相电压为0&#xff0c;30&#xff0c;60&#xff0c;90分合闸的抑制过电压…...

计算机毕业设计 java 校园闲置交易平台 Java+SpringBoot 校园闲置物品交易平台 Web 版高校二手物品交换系统

计算机毕业设计 java 校园闲置交易平台 gb3869&#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享随着校园物资丰富与环保理念普及&#xff0c;学生闲置物品增多&#xff0c;线下交易渠道窄、信息…...

个人项目复习-云盘Day03

考点13&#xff1a;大文件上传需求和常见问题普遍需求&#xff1a;在云存储、视频分享、在线教育等领域&#xff0c;用户上传大文件的需求日益普遍。核心挑战&#xff1a;网络波动、不稳定性及客户端资源限制&#xff0c;常给用户带来不佳体验&#xff1b;传统整文件上传易因中…...

基于comsol技术的磁可调双带高效吸收器

comsol磁可调双带吸收器。搞电磁超材料的兄弟应该都懂&#xff0c;玩双带吸收器最头疼的就是怎么动态调谐。传统结构一旦加工成型&#xff0c;吸收峰就焊死在固定频段了。最近在COMSOL里折腾磁可调方案发现个骚操作——在铁氧体基底里埋钇铁石榴石&#xff08;YIG&#xff09;阵…...

运维系列虚拟化系列OpenStack系列【仅供参考】:Service Plugin / Agent - 每5玩OpenStack(73) 两张图总结 Neutron 架构 - 每天5分钟玩转

Service Plugin / Agent - 每天5分钟玩转 OpenStack(73) && 两张图总结 Neutron 架构 - 每天5分钟玩转 OpenStack(74) Service Plugin / Agent - 每天5分钟玩转 OpenStack(73) DHCP Routing Firewall Load Balance 两张图总结 Neutron 架构 - 每天5分钟玩转 Open…...

运维系列虚拟化系列OpenStack系列【仅供参考】:详解 ML2 Core Plugin(II) - 每天5分钟玩转 OpenStack(72)

详解 ML2 Core Plugin(II) - 每天5分钟玩转 OpenStack(72) 详解 ML2 Core Plugin(II) - 每天5分钟玩转 OpenStack(72) Type Driver Mechanism Driver mechanism driver 有三种类型: Agent-based Controller-based 基于物理交换机 详解 ML2 Core Plugin(II) - 每天5分…...

运维系列虚拟化系列OpenStack系列【仅供参考】:Neutron 如何支持多种 network provider - 每5玩 OpenS-70 详解 ML2 Core Plugin(I)

Neutron 如何支持多种 network provider - 每天5分钟玩转 OpenStack(70) && 详解 ML2 Core Plugin(I) - 每天5分钟玩转 OpenStack(71) Neutron 如何支持多种 network provider - 每天5分钟玩转 OpenStack(70) linux bridge core plugin linux bridge agent 详解…...

从零起步学习MySQL 第十二章:MySQL分页性能如何优化?

前言&#xff1a;今天在看学长面经时发现了这样一个问题&#xff1a;字节三面——MySQL分页性能如何优化&#xff1f;作为后端开发工程师&#xff0c;分页是我们日常开发中高频接触的需求&#xff0c;小到后台管理系统的列表查询&#xff0c;大到百万级商品库的分页展示&#x…...

便捷省心!手机数码租赁小程序前端功能玩法详解

随着数码产品更新迭代速度加快&#xff0c;短期租赁成为不少用户体验新品、满足临时需求的优选方式。一款体验流畅的手机数码租赁小程序&#xff0c;其前端功能设计直接影响用户使用感受&#xff0c;以下从用户实际使用场景出发&#xff0c;详细介绍其核心功能玩法&#xff0c;…...

便捷寄件,省心直达——快递寄件小程序前端功能解析

日常工作生活中&#xff0c;快递寄件的便捷性的需求日益凸显&#xff0c;繁琐的寄件流程往往耗费人们大量时间。快递寄件小程序以用户核心需求为导向&#xff0c;打造简洁易用的前端功能&#xff0c;打通寄件全流程&#xff0c;弱化营销属性&#xff0c;专注为用户提供高效、省…...

一文带你深入了解Linux五种I/O模型和I/O多路复用

一文带你深入了解Linux五种I/O模型和I/O多路复用 文章目录一文带你深入了解Linux五种I/O模型和I/O多路复用一、几种典型 I/O 模型1. 阻塞 I/O2. 非阻塞 I/O3. 信号驱动 I/O4. I/O 多路复用&#xff08;高级 I/O&#xff09;5. 异步 I/O&#xff08;AIO&#xff09;二、阻塞与非…...

推荐常与服务器打交道的工程师都安装这款MCP工具

ssh-mcp&#xff0c;功能&#xff1a;让AI直接连接服务器进行操作 安装 # 1. Clone the repository: git clone https://github.com/tufantunc/ssh-mcp.git cd ssh-mcp# 2. Install dependencies: npm install &#xff08;需要你先安装nodejs&#xff09;然后在你的工…...