MySQL慢SQL优化

简介: 基础知识慢SQL官方定义If a query takes longer than this many seconds, the server increments the Slow_queries status variable. If the slow query log is enabled, the query is logged to the slow query log file; Unit:Second.阿里云控制台慢SQL参数SQL优化原因与影响•SQL优化原因:查询效率低的SQL(慢SQL)会占用机器大量的CPU、内存和IO资源,影响正常业务。

基础知识

慢SQL官方定义

If a query takes longer than this many seconds, the server increments the Slow_queries status variable. If the slow query log is enabled, the query is logged to the slow query log file; Unit:Second.

阿里云控制台慢SQL参数

image.png

SQL优化原因与影响

•SQL优化原因:查询效率低的SQL(慢SQL)会占用机器大量的CPU、内存和IO资源,影响正常业务。
•慢SQL现象/影响:SQL查询缓慢、业务超时、数据库机器CPU/IO飙升、业务连接不上数据库、现网故障等。

SQL语句执行过程

image.png

Optimizer查询优化器方式

逻辑优化

优化器的逻辑优化,即根据关系代数规则,对SQL语句进行等价变化:
(1) 对投影、选择等操作进行句式优化;
(2) 对条件表达式进行谓词优化、条件化简;
(3) 对连接语义进行外连接、嵌套连接的优化;
(4) 对集合、GROUP BY、ORDER BY等优化
(5) 子查询优化、视图重写、语义优化

逻辑优化例子

条件化简 :

select id,sfzh,address from t1 where 1=1 and name ='宸谦';

子查询优化 :

select * from t1 where a in (select a from t2);

优化器逻辑优化结果:

select t1.* from t1 join t2 on t1.a= t2.a;

 

物理优化

物理优化的总代价模型 Cost = CPU Cost + IO Cost
(1) CPU Cost:MySQL Server层,处理返回记录所花开销。
CPU Cost = records / TIME_FOR_COMPARE =
records / 5,即每5条记录的处理时间,作为 1 CPU Cost。
(2) IO Cost:存储引擎层面,读取页面的IO开销。

执行计划

查看

在SQL语句前加explain关键字可查看SQL语句的执行计划,
常用语法:
(1)explain extended(输出更多扩展信息)
(2)explain format=json (json格式输出,可看到cost等信息)
image.png

结果字段注解

image.png

案例分析

优化原则

优化总原则:业务侧优化 > SQL 优化 > 数据库+操作系统参数优化
SQL优化原则:高频SQL收益 > 低频SQL收益
业务侧优化例子:
(1)某业务每隔1分钟会并发几十路去数据库查询A表(全表扫描),造成其他业务响应超时
(2)统计分析类SQL拆分,热点数据缓存

慢SQL例子

SELECT
    count(*) count
FROM
    app_mst
LEFT JOIN app_profile ON app_mst.app_id = app_profile.app_id
LEFT JOIN app_apply_step ON app_mst.app_id = app_apply_step.app_id
WHERE
    app_apply_step.is_exp = '0';

执行计划:
image.png

优化步骤

(1)查看执行计划:
在SQL前加上 explain extended,主要关注key(用到什么索引)、rows(查询执行扫描的元组个数)、extra(是否利用到排序、临时表等)。
image.png
(2)查看SQL涉及的表结构,此处主要查看app_apply_step 表:
show create table app_apply_step, 主要关注表的索引和where 条件中的字段类型。可见 app_apply_step 表 is_exp 字段上无索引,且为tinyint类型。
image.png
(3)思考可能优化的点:
先查看表 app_apply_step 
字段is_exp的索引区分度 ,执行语句:
select count(distinct col1),
count(distinct col2)/count(*) from tb_name;
image.png

(4)is_exp 字段区分度约等于0,表明通过索引筛选非常高效。

alter table app_apply_step add index idx_is_exp (is_exp);
image.png

优化步骤总结

  1. 查看执行计划 explain extended
  2. 如果有告警信息,查看告警信息 show warnings;
  3. 查看SQL涉及的表结构和索引信息
  4. 根据执行计划,思考可能的优化点
  5. 按照可能的优化点执行表结构变更、增加索引、SQL改写等操作
  6. 查看优化后的执行时间和执行计划
  7. 如果优化效果不明显,重复第四步操作

慢SQL常见问题汇总

image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1796 152
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
1232 156
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
11月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
499 6
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
980 11
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
SQL 存储 关系型数据库
MySQL下使用SQL命令进行表结构与数据复制实践
MySQL下使用SQL命令进行表结构与数据复制实践
471 0
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉2
MySQl数据库第八课-------SQL命令查询-------主要命脉
337 0
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉 1
MySQl数据库第八课-------SQL命令查询-------主要命脉
418 0

推荐镜像

更多