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 来确保备份文件按正确的顺序应用,从而…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...