Mysq查询性能调优
当一条SQL执行较慢,需要分析性能瓶颈,到底慢在哪?
我们一般会使用Explain查看其执行计划,从执行计划中得知这条SQL有没有使用索引?使用了哪个索引?
但是执行计划显示内容不够详细,如果显示用到了某个索引,查询依然很慢,我们就无法得知具体是哪一步比较耗时?
好在MySQL提供一个SQL性能分析工具 — Profile。
Profile 可以帮助我们分析SQL性能瓶颈和资源消耗情况。
1. 查看Profile配置
show variables like '%profil%';
have_profiling 表示是否支持profile功能,YES表示支持
profiling 表示是否开启profile功能,ON开启,OFF关闭,默认是关闭状态
profiling_history_size 表示保存最近15条历史数据
2. 开启Profile功能
set profiling=1;
注意:修改配置,只对当前会话生效,会话关闭,Profile历史信息被清空。
3. 使用Profile
先造点数据,创建一张用户表:
CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`name` varchar(100) NOT NULL DEFAULT '' COMMENT '姓名',`age` tinyint NOT NULL DEFAULT 0 NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
执行一条耗时SQL:
select * from user order by name;
下面轮到主角Profile出场了。
我们执行的所有SQL语句都会被记录到Profile里面,包括执行失败的SQL语句。
可以使用show profiles命令查看:
输出参数详解:
Query_ID 表示自动分配的查询ID,顺序递增。
Duration 表示SQL语句执行耗时
Query 表示SQL语句内容
然后,我们再使用Query_ID去Profile中查看具体每一步的耗时情况:
show profile for query 1;
可以清楚的看到耗时主要花在创建排序索引(Creating sort index)上面。
再试一条SQL:
select distinct name from user;
这次的耗时主要花在了,创建临时文件、拷贝文件到磁盘、发送数据、删除临时表上面。
由此,可以得知distinct函数会创建临时文件,提醒我们建索引。
我们还可以扩展一下这条分析语句,查看一下cpu和block io的使用情况:
show profile cpu,block io for query 2;
另外,其实所有Profile历史数据都被记录在information_schema.profiling表中,我们也可以查询表得到结果:
select * from information_schema.profiling where Query_ID=2;
以上数据都是基于MySQL5.7版本,在MySQL8.0版本的输出结果字段有些变化。
另外,细心的你应该发现了,在我们每执行完一条SQL,都显示了一条warning信息,我们查看一下具体的warning信息:
show warnings;
意思就是,Profile工具将来有可能被删除,不建议继续使用了。
Mysq查询性能调优相关推荐
- 【Elasticsearch】索引和查询性能调优的21条建议-以及调优参数
文章目录 1.概述 1.Elasticsearch部署建议 1.1. 选择合理的硬件配置:尽可能使用 SSD 1.2. 给JVM配置机器一半的内存,但是不建议超过32G 1.3. 规模较大的集群配置专 ...
- SQL Server 执行计划(8) - 使用 SQL 执行计划进行查询性能调优
在本系列的前几篇文章(见底部索引)中,我们介绍了SQL 执行计划的多个方面,我们讨论了执行计划是如何在内部生成的,不同类型的计划,主要组件和运算符以及如何阅读和分析使用不同工具生成的计划.在本文中,我 ...
- Elasticsearch索引和查询性能调优的21条建议【下】
Elasticsearch是一款流行的分布式开源搜索和数据分析引擎,具备高性能.易扩展.容错性强等特点.它强化了Apache Lucene的搜索能力,把掌控海量数据索引和查询的方式提升到一个新的层次. ...
- sql查询非11位非数字_非生产环境SQL查询性能调优技巧
sql查询非11位非数字 It is a common misconception that you need real production data, or production like dat ...
- server sql top速度变慢解决方案_SQL Server的性能调优:解决查询速度慢的五种方法-数据库...
编辑推荐: 本文主要通过一下几个方面介绍:使用SQL DMV查找慢速查询.通过APM解决方案查询报告.SQL Server扩展事件.SQL Azure查询性能洞察等相关内容. 本文来自博客园,由火龙果 ...
- MySQL 开发日志 -- 性能调优
* mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];选项解析:IN 'log_n ...
- “金三银四”春招指南之“性能调优”:MySQL+Tomcat+JVM,看完还怕面试官的轰炸?
春招指南之"性能调优":MySQL+Tomcat+JVM,还怕面试官的轰炸? 01 MySQL性能调优 1.1 MySQL性能调优问题有哪些?怎么学? 关于这个,给大家看一份学习大 ...
- ELASTIC SEARCH 性能调优
ELASTICSEARCH 性能调优建议 创建索引调优 1.在创建索引的使用使用批量的方式导入到ES. 2.使用多线程的方式导入数据库. 3.增加默认刷新时间. 默认的刷新时间是1秒钟,这样会产生太多 ...
- elasticsearch原理_ElasticSearch读写底层原理及性能调优
ES写入/查询底层原理 1. Elasticsearch写入数据流程 客户端随机选择一个ES集群中的节点,发送POST/PUT请求,被选择的节点为协调节点(coordinating node) 协调节 ...
最新文章
- PTA基础编程题目集-6-3 简单求和
- string日期格式化_java面向对象---日期类
- 金融风控实战——信贷业务架构与业务分析
- 成功解决ValueError: Invalid format string
- C#实现所有经典排序算法汇总
- Python 生成账号密码算法
- node-sass安装报错node-sass@4.12.0 postinstall: `node scripts/build.js`
- MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解
- C++11中的std::function和std::bind
- 两个音轨合并_技能!如何合并两个音频文件?
- mysql 加锁 索引_一条简单的更新语句,MySQL是如何加锁的?
- linux ubuntu 22.04卸载firefox火狐浏览器正确方式
- python小程序表白
- elang 游戏 生成全局id
- STEAM游戏高主频i9-12900k 搭建CS:GO服务器
- 征信报告 加密文档_PDF文档如何加密?看完这个方法你就知道了
- 淘宝网(关于淘宝拆分)
- 千牛服务器网站,千牛平台远程服务器
- 什么是Oracle数据库?
- 地图坐标计算原理与技巧