MYSQL----------------sql 优化
优化 SQL 语句的一般步骤
1. 了解 SQL 的执行频率
SHOW STATUS LIKE 'Com_%';
代码解释:
SHOW STATUS LIKE 'Com_%';:此命令可以查看各种 SQL 语句的执行频率,例如Com_select表示SELECT语句的执行次数,Com_insert表示INSERT语句的执行次数等。通过查看这些信息,可以大致了解哪些类型的 SQL 语句被频繁执行,为后续的优化提供方向。
2. 定位执行效率较低的 SQL 语句
- 通常可以通过慢查询日志来定位执行时间较长的 SQL 语句。在 MySQL 的配置文件中设置
slow_query_log = 1和long_query_time(例如long_query_time = 2,表示执行时间超过 2 秒的查询会被记录),然后查看慢查询日志文件。
3. 通过 EXPLAIN 分析 SQL 的执行计划
EXPLAIN SELECT * FROM table_name WHERE column = 'value';
代码解释:
EXPLAIN关键字用于查看 SQL 语句的执行计划,它会输出一系列信息,包括:id:查询的序列号。select_type:查询类型,如SIMPLE、PRIMARY、SUBQUERY等。table:涉及的表名。type:连接类型,从最优到最差依次为system、const、eq_ref、ref、range、index、ALL。possible_keys:可能使用的索引。key:实际使用的索引。rows:估计要扫描的行数。Extra:额外信息,如Using where表示使用了WHERE子句进行筛选,Using index表示使用了覆盖索引等。
索引问题
索引的存储分类
-
B-Tree 索引:
- 最常见的索引类型,适用于范围查询、排序和精确匹配。
- 存储结构是一种平衡多叉树,数据按顺序存储,叶子节点存储实际的数据或指向数据的指针。
-
Hash 索引:
- 适用于精确的等值查询,通过哈希函数将键值映射到存储位置。
- 不支持范围查询和排序操作。
MySQL 如何使用索引
- MySQL 会根据查询条件、表结构和索引情况自动选择使用索引。例如,在
SELECT * FROM table WHERE column = 'value';中,如果column上有索引,MySQL 可能会使用该索引进行查找。

查看索引的使用情况
SHOW INDEX FROM table_name;
代码解释:
SHOW INDEX FROM table_name;:该命令可以查看表table_name的索引信息,包括索引名称、列名、索引类型等,有助于检查索引的使用情况。
两个简单实用的优化方法
定期分析表和检查表
ANALYZE TABLE table_name;
CHECK TABLE table_name;
代码解释:
ANALYZE TABLE table_name;:更新表的统计信息,帮助优化器更好地选择执行计划。CHECK TABLE table_name;:检查表的完整性,发现和修复可能的问题。
定期优化表
OPTIMIZE TABLE table_name;
代码解释:
OPTIMIZE TABLE table_name;:对表进行碎片整理和空间回收,对于经常更新、删除的表很有用。
常用 SQL 的优化
大批量插入数据
INSERT INTO table_name (column1, column2) VALUES (value1, value2), (value3, value4),...;
代码解释:
- 一次插入多行数据可以减少通信开销,提高插入效率,而不是多次执行单行插入。
优化 INSERT 语句
- 尽量减少不必要的索引,因为插入数据时需要更新索引,过多的索引会影响插入性能。
优化 GROUP BY 语句
- 确保
GROUP BY子句中的列有索引,避免使用GROUP BY进行排序时产生临时表。
优化 ORDER BY 语句
- 尽量在
ORDER BY列上创建索引,使排序操作更高效。
优化嵌套查询
- 尽量将嵌套查询转换为连接查询,因为连接查询通常比嵌套查询性能更好。
MySQL 如何优化 OR 条件
- 对于
WHERE column1 = 'value1' OR column2 = 'value2'这样的语句,如果column1和column2上都有索引,MySQL 可能无法同时使用两个索引。可以考虑使用UNION来改写,例如:
(SELECT * FROM table WHERE column1 = 'value1') UNION (SELECT * FROM table WHERE column2 = 'value2');
使用 SQL 提示
- 可以使用
USE INDEX或FORCE INDEX等 SQL 提示强制使用某个索引或避免使用某个索引,例如:
SELECT * FROM table USE INDEX (index_name) WHERE column = 'value';
小结
-
优化步骤:
- 首先通过
SHOW STATUS了解 SQL 语句的执行频率,定位慢查询,再使用EXPLAIN分析执行计划。 - 根据
EXPLAIN的结果确定问题,如是否使用了合适的索引,是否产生了额外的临时表等。
- 首先通过
-
索引方面:
- 了解 B-Tree 和 Hash 索引的特点和适用场景,合理创建和使用索引,通过
SHOW INDEX查看索引使用情况。
- 了解 B-Tree 和 Hash 索引的特点和适用场景,合理创建和使用索引,通过
-
实用优化方法:
- 定期进行
ANALYZE TABLE、CHECK TABLE和OPTIMIZE TABLE操作,维护表的性能。
- 定期进行
-
具体 SQL 优化:
- 对于大批量插入使用多行插入语句,优化
INSERT、GROUP BY、ORDER BY语句,尽量将嵌套查询转换为连接查询,优化OR条件,使用 SQL 提示辅助优化。
- 对于大批量插入使用多行插入语句,优化
在实际的 SQL
优化过程中,需要综合考虑各种因素,根据具体的查询和表结构,灵活运用上述优化方法,以提高数据库的性能。同时,要注意优化过程中可能带来的其他问题,如索引过多会影响数据更新性能,过度优化可能导致维护成本增加等。通过不断的实践和经验积累,可以更好地掌握
SQL 优化的技巧。
相关文章:
MYSQL----------------sql 优化
优化 SQL 语句的一般步骤 1. 了解 SQL 的执行频率 SHOW STATUS LIKE Com_%;代码解释: SHOW STATUS LIKE Com_%;:此命令可以查看各种 SQL 语句的执行频率,例如 Com_select 表示 SELECT 语句的执行次数,Com_insert 表示 INSERT 语…...
深度学习中的正则化方法
最近看到了正则化的内容,发现自己对正则化的理解已经忘得差不多了,这里在整理一下,方便以后查阅。 深度学习中的正则化方法 1. L2 正则化(L2 Regularization)2. L1 正则化(L1 Regularization)3.…...
前端报告 2024:全新数据,深度解析未来趋势
温馨提示: 此报告为国际版全球报告,其中所涉及的技术应用、工具偏好、开发者习惯等情况反映的是全球前端开发领域的综合态势。由于国内外技术发展环境、行业生态以及企业需求等存在差异,可能有些内容并不完全契合国内的实际情况,请大家理性阅读,批判性地吸收其中的观点与信…...
计算机网络之---子网划分与IP地址
子网划分与IP地址的关系 在计算机网络中,子网划分(Subnetworking)是将一个网络划分为多个子网络的过程。通过子网划分,可以有效地管理和利用IP地址空间,提高网络的性能、安全性和管理效率。 子网划分的基本目的是通过…...
计算机网络 (31)运输层协议概念
一、概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。运输层的一个核心功能是提供从源端主机到目的端主机的可靠的、与实际使用的网络无关的信息传输。它向高层用…...
代码随想录算法训练营day28
代码随想录算法训练营 —day28 文章目录 代码随想录算法训练营前言一、122.买卖股票的最佳时机II二、55. 跳跃游戏三、跳跃游戏 II方法一方法二 1005. K 次取反后最大化的数组和总结 前言 今天是算法营的第28天,希望自己能够坚持下来! 今日任务&#x…...
建立时间和保持时间
建立时间 在时钟有效沿到来之前,数据必须维持一段时间保持不变,这段时间就是建立时间 Tsetup 1 基本概念 建立时间(Setup Time): 在 SystemVerilog 中,建立时间是指在时钟信号的有效边沿(例如…...
vue,router路由传值问题,引用官方推荐
参考贴https://blog.csdn.net/m0_57033755/article/details/129927829 根据官方文档的更新日志,建议使用state传值 官方文档更新日志 实际的console结果 传值 router.push({ name: KnowledgeDetail, state: { params } });接收值 const historyParams histor…...
AIDD-人工智能药物设计-AlphaFold系列:年终回顾,AlphaFold迄今为止的实际应用案例
AlphaFold系列:年终回顾,AlphaFold迄今为止的实际应用案例 01 引言 AlphaFold由 DeepMind 团队开发,最初在蛋白质结构预测竞赛 CASP 中惊艳亮相。随着 AlphaFold2 和后续版本的迭代进步,其精度和通用性不断提升,逐渐走…...
Scala语言的面向对象编程
Scala语言的面向对象编程 引言 在当今的软件开发中,面向对象编程(OOP)是一种非常强大且广泛使用的编程范式。Scala是一种现代编程语言,结合了面向对象编程和函数式编程的特性,非常适合用于大规模软件的开发。本文将介…...
MySQL学习记录1【DQL和DCL】
SQL学习记录 该笔记从DQL处开始记录 DQL之前值得注意的点 字段 BETWEEN min AND max 可以查询区间[min, max]的数值如果同一个字段需要满足多个OR条件,可以采取 字段 IN(数值1, 数值2, 数值3....)LIKE语句 字段 LIKE ___%%% 表示模糊匹配,_匹配一个字段…...
验证码转发漏洞
开发人员有时候会以数组的形式接收用户的手机号并遍历执行,这时就可以在注册或登录页面填写两个手机号并点击发送验证码,这两个手机号会同时收到相同验证码,可以用任意一个手机号登录或注册,即验证码转发漏洞。 1、burpsuite内置…...
使用 C++ 实现神经网络:从基础到高级优化
引言 在现代机器学习中,神经网络已经成为最重要的工具之一。虽然 Python 提供了诸如 TensorFlow、PyTorch 等强大的机器学习库,但如果你想深入理解神经网络的实现原理,或者出于某些性能、资源限制的考虑,使用 C 来实现神经网络会是…...
【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)
目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…...
Kotlin语言的循环实现
Kotlin语言中的循环实现 Kotlin是一种现代的、跨平台的编程语言,广泛应用于Android开发、后端服务及多种其他软件开发领域。与Java类似,Kotlin也支持多种循环结构,包括for循环、while循环和do while循环。掌握这些循环结构是每个Kotlin开发者…...
基于CNN的人脸识别考勤管理系统实现
随着技术的不断进步,人脸识别技术已经在各行各业得到了广泛的应用,尤其在 考勤管理 上,它提供了更加智能、便捷、精准的解决方案。本篇博客将介绍如何基于 PyQt5 和 MySQL 实现一个 人脸识别考勤系统,并通过具体代码展示如何通过图…...
Android基于回调的事件处理
Android 中的回调机制:基于回调的事件处理详解 在 Android 开发中,回调(Callback)是一种常见的事件处理机制,主要用于异步操作和事件通知。与传统的基于监听器的事件处理相比,回调机制更加灵活、通用&…...
postgis和地理围栏
postgis postgis是pg数据库的一个插件,除原数据类型外(int varchar)、新增了空间数据类型(geography和geometry)。比如我们新建一张道路表road(字段有名称varchar、建设时间timestamp、地理位置geometry),可以将道路名字、建设时间存进去,同…...
《鸿蒙系统AI技术:筑牢复杂网络环境下的安全防线》
在当今数字化时代,复杂网络环境给智能系统带来了诸多安全挑战,而鸿蒙系统中的人工智能技术却展现出强大的安全保障能力,为用户在复杂网络环境中的安全保驾护航。 微内核架构:安全基石 鸿蒙系统采用微内核架构,将核心…...
SQL SERVER__RSN 恢复的深入解析
1. RSN 的工作原理 RSN 是 SQL Server 内部用于跟踪和管理备份和恢复操作顺序的编号。每次数据库备份(包括完整备份、差异备份和事务日志备份)都会生成一个唯一的 RSN。SQL Server 在恢复过程中使用 RSN 来确保备份文件按正确的顺序应用,从而…...
终端用户的福音:Gemma-3-12b-it镜像+OpenClaw免开发体验
终端用户的福音:Gemma-3-12b-it镜像OpenClaw免开发体验 1. 为什么这是终端用户的转折点 上周我帮一位做外贸的朋友配置自动化日报系统时,她盯着终端里滚动的命令行突然问我:"有没有不用写代码也能让AI干活的方法?"这个…...
OpenClaw技能开发入门:为Qwen3-32B-Chat镜像编写自定义自动化模块
OpenClaw技能开发入门:为Qwen3-32B-Chat镜像编写自定义自动化模块 1. 为什么需要自定义OpenClaw技能? 去年我接手了一个重复性极高的数据整理工作——每天要从十几个不同格式的Excel文件中提取特定字段,合并成统一报表。当我第三次在凌晨两…...
02 前端 Web 开发 HTML5 + CSS3 + 移动 web 视频教程,前端web入门首选黑马程序员
02 前端 Web 开发 HTML5 CSS3 移动 web 视频教程,前端web入门首选黑马程序员 一、参考资料 【前端Web开发HTML5CSS3移动web视频教程,前端web入门首选黑马程序员】 https://www.bilibili.com/video/BV1kM4y127Li/?p17&share_sourcecopy_web&vd…...
永磁同步电机PMSM无感FOC控制:扩展卡尔曼滤波器EKF观测器,代码运行无错,支持无感启动...
永磁同步电机pmsm无感foc控制,观测器采用扩展卡尔曼滤波器ekf,代码运行无错误,支持无感启动,代码移植性强,可以移植到国产mcu上.—— 从“功能”视角看透 ARM 官方 5 套 demo 一、写作目的 很多开发者拿到 CMSIS-DSP 例…...
Go输入输出格式化技巧大全,深入理解操作系统中的线程。
Go基础:输入与输出格式化详解 标准输入与输出 Go语言通过fmt包提供丰富的输入输出功能。标准输出常用Print、Println和Printf函数。Print直接输出内容,Println自动添加换行符,Printf支持格式化输出。 fmt.Print("Hello") // …...
计算机毕业设计 | SpringBoot+vue文理医院预约挂号系(附源码+论文)
1,绪论 1.1 研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务,逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速,使用起来非常简单容易,用户甚至不用掌握相关的专业知识,根据教程指导即…...
XUnity.AutoTranslator:为Unity游戏开启多语言世界的智能钥匙
XUnity.AutoTranslator:为Unity游戏开启多语言世界的智能钥匙 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当游戏语言成为障碍:一个翻译插件的诞生背景 你是否曾经遇到过这样的…...
STM32开发库对比:寄存器、SPL、HAL与LL深度解析
1. STM32开发库全景解析:从寄存器到HAL/LL的深度对比从事嵌入式开发这些年,我见证了STM32生态系统的快速演进。记得刚接触STM32F103时,标准外设库还是主流选择,如今Cube生态已成标配。本文将结合我的实际项目经验,详细…...
基于 MATLAB 的交叉偏导数(CPD)约束盲图像去模糊系统实现与分析——输出去模糊前后对比图像及模糊核分布。
操作环境:MATLAB 2024a1、算法描述基于MATLAB的交叉偏导数(CPD)盲图像去模糊系统,是一种结合图像特征分析、频域滤波以及正则化思想的综合性图像复原方案。整个系统的设计核心在于通过交叉偏导数特征提取模糊方向信息,…...
黑盒LLM幻觉抑制:10大落地方案全解析
面向API调用黑盒LLM的幻觉抑制落地方案 一、零成本提示工程与推理引导类(仅修改Prompt,直接API调用即可生效) 方案1:Self-Consistency(自一致性投票)- SelfCheckGPT 论文基础信息 标题:SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generativ…...
