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

MySQL 中如何进行 SQL 调优?

在MySQL中进行SQL调优是一个系统性工程,需结合索引优化、查询改写、性能分析工具、数据库设计及硬件配置等多方面策略。以下是具体优化方法及案例说明:

一、索引优化:精准提速的关键

  1. 索引类型选择

    • 普通索引:加速频繁查询的列(如WHERE条件中的department_id)。
    • 复合索引:多列组合查询时创建(如CREATE INDEX idx_name_age ON users(name, age)),避免全表扫描。
    • 覆盖索引:索引包含查询所需所有列(如SELECT id, name FROM users),避免回表操作。
  2. 索引维护

    • 定期删除无用索引,避免写操作开销。
    • 使用EXPLAIN分析查询:若possible_keys有索引但keyNULL,需调整查询条件或索引设计。

二、查询重写:消除性能瓶颈

  1. 避免全表扫描

    • 添加有效过滤条件(如SELECT * FROM employees WHERE department_id = 3 AND name LIKE '%张%'),缩小扫描范围。
  2. 减少数据传输

    • 指定查询列(如SELECT id, name FROM users),避免SELECT *导致的I/O浪费。
  3. 合理使用JOIN与子查询

    • 优先使用JOIN替代子查询(如将子查询SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE name = 'IT')改为JOIN查询)。
  4. 分页优化

    • 避免LIMIT offset, size(如LIMIT 10000, 20),改用条件查询(如WHERE id > 10000 LIMIT 20)。

三、性能分析工具:精准定位问题

  1. EXPLAIN:执行计划分析

    • 关注type(理想值为consteq_refref)、key(实际使用索引)、rows(预估扫描行数)和Extra(如Using temporary表示需优化)。
    • 示例:EXPLAIN SELECT * FROM orders WHERE customer_id = 123;
  2. 慢查询日志:捕捉低效SQL

    • 启用方法:SET GLOBAL slow_query_log = 'ON';,结合mysqldumpslow工具分析。
    • 优化案例:对SELECT * FROM users WHERE age > 30添加索引CREATE INDEX idx_age ON users(age)
  3. 性能模式(Performance Schema)

    • 监控服务器内部事件(如函数调用、SQL执行阶段),提供详细性能数据。

四、数据库设计与配置优化

  1. 规范化与反规范化

    • 规范化:减少数据冗余,适合事务性系统(如电商订单表)。
    • 反规范化:合并表或冗余字段,提升查询性能(如报表系统)。
  2. 分区与分片

    • 分区:按范围、哈希等分区(如PARTITION BY RANGE(YEAR(order_date))),减少单次查询扫描范围。
    • 分片:将数据分布到多实例,分散负载(如用户表按地区分片)。
  3. 硬件与配置

    • 提升CPU、内存(尤其是InnoDB缓冲池innodb_buffer_pool_size)、使用SSD磁盘。
    • 调整max_connections避免高并发下资源耗尽。

五、高级优化策略

  1. 批处理操作

    • 减少频繁插入/更新的I/O开销(如INSERT INTO table VALUES (...), (...), (...))。
  2. 临时表与视图

    • 简化复杂查询逻辑(如CREATE TEMPORARY TABLE temp_users AS SELECT ...)。
  3. 缓存机制

    • 对频繁查询且变化较少的数据,使用Redis等缓存结果,减少数据库压力。

总结:调优实践建议

  1. 优先使用索引:但避免过度索引导致写操作开销。
  2. 简化查询逻辑:减少嵌套、避免SELECT *
  3. 持续监控分析:通过慢查询日志、EXPLAIN、性能模式定位瓶颈。
  4. 结合业务场景:读写比例、数据量级决定优化策略(如反规范化适用于分析型场景)。

通过以上策略,可显著提升MySQL查询性能,但需根据实际场景权衡利弊,避免过度优化。

我正在编程导航学习项目课程,和其他编程爱好者一起交流进步,你也一起来吧
点击进入

相关文章:

MySQL 中如何进行 SQL 调优?

在MySQL中进行SQL调优是一个系统性工程,需结合索引优化、查询改写、性能分析工具、数据库设计及硬件配置等多方面策略。以下是具体优化方法及案例说明: 一、索引优化:精准提速的关键 索引类型选择 普通索引:加速频繁查询的列&…...

【C++游戏引擎开发】第33篇:物理引擎(Bullet)—射线检测

一、射线检测核心理论体系 1.1 射线检测的数学基础 1.1.1 参数化射线方程 射线在三维空间中的数学表达采用参数方程: r ( t ) = o + t d ^ ( t ∈ [...

基于flask+pandas+csv的报表实现

基于大模型根据提示词去写SQL执行SQL返回结果输出报表技术上可行的,但为啥还要基于pandas去实现呢? 原因有以下几点: 1、大模型无法满足实时性输出报表的需求; 2、使用大模型比较适合数据量比较大的场景,大模型主要…...

PySide6 GUI 学习笔记——常用类及控件使用方法(常用类字体QFont)

文章目录 一、QFont常用方法二、常用方法总结1. 基础属性设置2. 高级样式控制3. 序列化与反序列化4. 字体信息获取 三、应用实例 字体类QFont用于设置界面控件上显示的字体,它包含字体名称、字体尺寸、粗体字、斜体字、删除线、上划线、下划线、字体间距等属性。 如…...

北斗导航 | 北斗RTK定位厄待解决的问题,未来发展

北斗RTK(实时动态定位)技术在高精度定位领域已取得显著进展,但仍面临一系列技术挑战和未来发展方向。以下从亟待解决的问题和未来发展趋势两方面进行详细分析: 一、北斗RTK定位亟待解决的核心问题 电离层扰动对定位精度的影响 电离层扰动是当前北斗RTK技术面临的最大自然挑…...

宝塔服务安装使用的保姆级教程

宝塔介绍: 宝塔面板(BT Panel) 是一款 国产的服务器运维管理面板,主要用于简化 Linux/Windows 服务器的网站、数据库、FTP、防火墙等管理操作。它通过图形化界面(Web端)和命令行工具(bt 命令&a…...

Linux平台下SSH 协议克隆Github远程仓库并配置密钥

目录 注意:先提前配置好SSH密钥,然后再git clone 1. 检查现有 SSH 密钥 2. 生成新的 SSH 密钥 3. 将 SSH 密钥添加到 ssh-agent 4. 将公钥添加到 GitHub 5. 测试 SSH 连接 6. 配置 Git 使用 SSH 注意:先提前配置好SSH密钥,然…...

Electron 打包与发布指南:让你的应用运行在 Windows、macOS、Linux

🚀 Electron 打包与发布指南:让你的应用运行在 Windows、macOS、Linux 使用 Electron 开发桌面应用只是第一步,最终我们还需要将应用打包成用户可运行的可执行文件(如 .exe、.dmg、.AppImage),并能在各平台…...

Java【网络原理】(5)深入浅出HTTPS:状态码与SSL/TLS加密全解析

目录 1.前言 2.正文 2.1状态码 2.2HTTP与HTTPS的关系 2.3SSL协议 2.3.1对称加密 2.3.2非对称加密 2.3.3中间人攻击 2.3.4校验机制 2.3.4.1证书 2.3.4.2数字签名 1. 数字签名的生成过程 2. 数字签名的验证过程 2.4TLS协议(握手过程) 3.小结…...

【基础IO下】磁盘/软硬链接/动静态库

前言: 文件分为内存文件和磁盘文件。磁盘文件是一个特殊的存在,因为磁盘文件不属于冯诺依曼体系,而是位于专门的存储设备中。因此,磁盘文件存在的意义是将文件更好的存储起来,一边后续对文件进行访问。在高效存储磁盘…...

SpringBoot项目容器化进行部署,meven的docker插件远程构建docker镜像

需求:将Spring Boot项目使用容器化进行部署 前提 默认其他环境,如mysql,redis等已经通过docker部署完毕, 这里只讨论,如何制作springboot项目的镜像 要将Spring Boot项目使用docker容器进行部署,就需要将Spring Boot项目构建成一个docker镜像 一、手动…...

【小记】excel vlookup一对多匹配

一个学生报四门课,输出每个学生课程 应用概述操作预处理数据计数指令 COUNTIFS进行一对多匹配 vlookup 应用概述 应用场景:学生报名考试,需要整理成指定格式,发给考试院。 一个学生最多报考四门 格式实例:准考证号 …...

LeetCode热题100 两数之和

目录 两数之和题目解析方法一暴力求解代码 方法二哈希代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿…...

问题解决思路:numpy:DLL load failed

首先明确几点: 1这是在使用anaconda中除开base环境下其他envs时出现的问题 2这不是pytorch版本过高的问题(也可以是) 3这不是pytorch安装错误的问题(也可以是)需要检查是否正确安装 解决思路: 本人遇到…...

[春秋云镜] Brute4Road 仿真场景

文章目录 靶标介绍:知识点约束性委派攻击 外网redis主从复制base64提权 内网搭建代理wpcargo插件漏洞mssql弱口令SweetPotato提权远程桌面连接mimikatz抓取hash约束性委派攻击 参考文章 靶标介绍: Brute4Road是一套难度为中等的靶场环境,完成…...

adb 实用命令汇总

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 基础adb命令 # 重启adb adb kill-server# 查看已连接的设备 adb devices# 进入命令行 adb shell# 使用 -s 参数来指定设备 adb -s <设备序列号> shell…...

鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK

har库导入&#xff1a; { "license": "", "devDependencies": {}, "author": "", "name": "entry", "description": "Please describe the basic information.", &qu…...

《Python星球日记》 第54天:卷积神经网络进阶

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、深度CNN架构解析1. LeNet-5&#xff08;1998&#xff09;2. AlexNet&#x…...

《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门

第53篇&#xff1a;Hugging Face生态系统入门 ——从模型获取到部署的全流程实战指南 &#x1f4cc; 摘要 在人工智能快速发展的今天&#xff0c;Hugging Face已成为自然语言处理&#xff08;NLP&#xff09;领域最具影响力的开源平台之一。它不仅提供丰富的预训练模型、强大…...

【基于 LangChain 的异步天气查询2】GeoNames实现地区实时气温查询

目录 功能简介 一、创建GeoNames账号 1、进入官网 2、创建账号 二、运行代码 weather_runnable.py main.py 运行结果 功能简介 本文主要通过Langchain&#xff0c;结合GeoNames实现了地区温度的实时查询&#xff0c;并通过GPT-4o对温度进行一段简短的描述。 一、创建Ge…...

嵌入式与物联网:C 语言在边缘计算时代的破局之道

引言 在万物互联的 2025 年&#xff0c;全球物联网设备连接数突破 300 亿台&#xff0c;其中 78% 的嵌入式控制系统仍基于 C 语言开发。这种跨越半个世纪的编程语言&#xff0c;正以新的技术形态在智能汽车、工业物联网、边缘计算等领域重塑竞争力。本文通过三个前沿应用场景&…...

《基于人工智能的智能客服系统:技术与实践》

一、引言 在数字化时代&#xff0c;客户服务已成为企业竞争的关键领域之一。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;智能客服系统逐渐成为企业提升服务质量和效率的重要工具。智能客服不仅能够快速响应客户咨询&#xff0c;还能通过自然语言处理&am…...

5. HTML 转义字符:在网页中正确显示特殊符号

在 HTML 开发中,我们经常会遇到需要显示特殊字符的情况,比如 <、>、空格或版权符号等。直接输入这些字符可能会导致 HTML 解析错误或显示异常。接下来通过学习 HTML 转义字符(也称为实体字符),将会掌握了如何在网页中正确显示这些特殊符号的方法。 一、为什么需要转…...

基于nodejs + Koa +Nuxt3的订单系统项目实战

以下是一个基于 Node.js Koa Nuxt3 的订单系统项目实战指南&#xff0c;包含关键实现步骤和代码示例&#xff1a; 一、项目架构设计 project/ ├── backend/ # Koa 后端 │ ├── config/ # 配置文件 │ ├── controllers/ # 控制器 │ ├──…...

软件开发者如何转战AI领域

在人工智能&#xff08;AI&#xff09;技术迅猛发展的当下&#xff0c;越来越多的软件工程师开始考虑转型进入AI领域。本文将探讨AI软件行业的现状、所需能力&#xff0c;以及普通软件工程师在转型过程中可以借助的技能和需要补充的知识。 AI软件行业的现状 截至2025年&#…...

服务器数据恢复—硬盘坏道导致EqualLogic存储不可用的数据恢复

服务器存储数据恢复环境&故障&#xff1a; 一台EqualLogic某型号存储中有一组由16块SAS硬盘组建的RAID5阵列。上层采用VMFS文件系统&#xff0c;存放虚拟机文件&#xff0c;上层一共分了4个卷。 磁盘故障导致存储不可用&#xff0c;且设备已经过保。 服务器存储数据恢复过程…...

JAVA实战开源项目:智能学习平台系统 (Vue+SpringBoot) 附源码

本文项目编号 T 181 &#xff0c;文末自助获取源码 \color{red}{T181&#xff0c;文末自助获取源码} T181&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

Linux系统使用vscode格式化shell脚本

推荐工具及配置方案 BeautySH 特点 纯 Python 实现&#xff0c;轻量级且活跃维护。 配置步骤 安装 BeautySH pip3 install beautyshVSCode 集成 打开命令面板&#xff08;CtrlShiftP&#xff09;&#xff0c;输入 Tasks: Configure Task&#xff0c;选择 Create tasks.json f…...

牛客练习赛138

目录 A-小s的签到题 无注释版 有注释版 B-行列改写 无注释版 有注释版 C-树上替身追赶游戏 无注释版 有注释版 A-小s的签到题 无注释版 #include<bits/stdc.h> using namespace std; struct f{char ch;int x; }a[110]; bool cmp(f p,f q){if(p.xq.x) return p…...

傅利叶十周年,升级核心战略:“有温度”的具身智能蓝图

5月9日&#xff0c;傅利叶十周年庆典暨首届具身智能生态峰会在上海正式召开。本次大会以“十年共创&#xff0c;具身成翼”为主题&#xff0c;汇聚了来自通用机器人与医疗康复领域的顶尖专家学者、合作伙伴与投资机构&#xff0c;共同探索具身智能在未来十年的技术应用与生态发…...