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 来确保备份文件按正确的顺序应用,从而…...
Spring原理(Bean的生命周期)
一、Bean的作用域Bean 的作⽤域是指 Bean 在 Spring 框架中的某种⾏为模式。⽐如单例作⽤域: 表⽰ Bean 在整个 Spring 中只有⼀份, 它是全局共享的. 那么当其他⼈修改了这个值之后, 那么另⼀个⼈读取到的就是被修改的值作用域说明singleton每个SpringIoc容器内同名称的Bean只有…...
网站 SEO 优化检查需要检查哪些方面
网站 SEO 优化检查需要检查哪些方面 在当今互联网时代,一个网站的成功与否在很大程度上取决于其在搜索引擎上的表现。搜索引擎优化(SEO)是提升网站在搜索结果中排名的重要手段。但是,SEO 并不是一劳永逸的事情,需要持…...
Selenoid API完全解析:从会话管理到资源监控的终极指南
Selenoid API完全解析:从会话管理到资源监控的终极指南 【免费下载链接】selenoid Selenium Hub successor running browsers within containers. Scalable, immutable, self hosted Selenium-Grid on any platform with single binary. 项目地址: https://gitcod…...
CAN总线终端电阻原理与工程实践详解
1. CAN总线终端电阻的核心作用解析在工业控制和汽车电子领域,CAN总线是最常用的现场总线之一。作为从业十余年的嵌入式工程师,我处理过无数CAN总线异常案例,其中约30%的通信故障都与终端电阻配置不当有关。120Ω这个看似简单的参数࿰…...
XPT2046触摸驱动设计与车载嵌入式集成实践
1. XPT2046 触摸控制器驱动技术解析与嵌入式集成实践XPT2046 是一款广泛应用于嵌入式人机交互系统的 12 位逐次逼近型(SAR)模数转换器(ADC),专为四线/五线电阻式触摸屏设计。其核心功能并非独立显示驱动,而…...
BK1086/88 DSP收音机Arduino库详解
1. 项目概述PU2CLR BK108X 是一款专为 BEKEN BK1086 和 BK1088 高集成度数字信号处理(DSP)广播接收芯片设计的 Arduino 库。该库并非通用型通信封装,而是面向射频接收系统工程实践的底层控制框架,其核心价值在于将芯片复杂的寄存器…...
Go接口interface与鸭子类型
Go语言中的接口与鸭子类型编程 在编程世界中,Go语言的接口(interface)和鸭子类型(Duck Typing)是两种灵活而强大的设计模式。它们通过解耦类型与行为,让代码更具扩展性和可维护性。Go的接口不同于其他语言…...
YOLO X Layout实战案例:政务公文自动识别Title/Section-header/Page-footer三级结构
YOLO X Layout实战案例:政务公文自动识别Title/Section-header/Page-footer三级结构 1. 项目背景与价值 政务公文处理是政府日常工作中的重要环节,每天都有大量的公文需要整理、归档和数字化。传统的人工处理方式效率低下,容易出错…...
Sen2Cor批处理实战:从L1C到L2A,如何确保你的大气校正结果不受处理基线影响?
Sen2Cor批处理实战:处理基线对L2A大气校正结果的影响解析 第一次用Sen2Cor处理完200景Sentinel-2数据后,我发现同一地区的NDVI值在不同时期竟然出现了断崖式下跌——不是植被变化,而是处理基线在作祟。这个教训让我意识到,批量大气…...
C++20 协同调度原语:利用 std::atomic::wait/notify 实现低功耗自旋锁在高并发下的快速响应协议
各位同仁,女士们,先生们,欢迎来到今天的技术讲座。在现代C编程中,高性能与低功耗的追求从未停止。随着多核处理器的普及和异步编程模型的兴起,对并发原语的精细化控制变得尤为关键。C20标准为我们带来了诸多激动人心的…...
