时间:2021-05-02
我们干开发面试工作的时候,发现对数据库的面试比重很大。说明对数据库的知识掌握对我们程序员越来越重要了。接下来这篇文章我们来看看如何分析我们的sql执行效率。首先找到执行慢的sql,然后对执行慢的SQL进行分析。
一 准备数据
在分析之前是不是有这样的困惑,我的数据量这么少。我如何分析SQL执行效率。不要慌,我们已准备了一千万条数据。接下来看看如何将这一千万条数据快速导入到数据库中。
1. 创建表和导入一千万条数据
表和数据地址(gitee) https://gitee.com/flowerAndJava/millions_data
2. 大批量数据导入数据
a 将数据库导入服务器中(如果是windows系统,这步省略)
b 创建一个数据库
c 命令行登录数据库
d 切换到使用的数据库
e 使用命令
对命令解释: '/tmp/tb_sku1.sql' 数据的目录(windows目录例如:D:\life\tb_sku1.sql),tb_sku 要导入到的表。
注意:
我们之前使用insert的sql将数据导入到数据库中,但是往库中导入上千万数据会需要很久时间。
二 慢查询分析(查找执行时间长的sql)
2.1 show profiles
show profiles是mysql提供可以用来分析当前会话中语句执行的资源消耗情 况。可以用来SQL的调优测量。
2.1.1 设置MySQL支持profile
1. 查看是否支持
结果为YES,代表支持。
2. 查看profiling(profiling默认是关闭的)
结果为0,代表没有开启
3. 开启profiling
2.1.2 show profiles的使用
1. 输入一系列查询语句
2. 查看没一条SQL执行时间
查看没每一条sql执行时间。
3. 查询每一条sql每个阶段执行时间
上图解释
4. 查看线程在什么资源上耗费过高 (类型 all、cpu、block io 、context、switch、page faults)
上图说明
2.2 慢查询日志
慢查询日志记录了所有执行时间超过参数(long_query_time)设置值并且扫描 记录数不少于min_examined_row_limit,的所有SQL日志。long_query_time默 认为10秒,最小为0,精度可以到微秒。
2.2.1 设置慢查询日志
1. 修改配置文件(慢查询日志默认关闭的) 修改配置文件命令 vi /etc/my.cnf 然后在配置文件最下方加入下面配置
2. 重启mysql服务
备注
如果执行命令报如下错误
请使用命令 systemctl restart mysqld.service
3. 查看慢查询日志目录
2.2.2 日志读取
1. 查询long_query_time的值
2. 执行查询操作
3. 查询慢查询日志
a 使用cat
b 如果慢查询日志很多,借助借助于mysql自带的mysqldumpslow工具,进行分类汇总
三 explain执行计划、索引使用和SQL优化
通过以上步骤查询到效率低的SQL语句后,可以通过EXPLAIN命令获取Mysql如何执行Select语句信息,包含select语句执行过程中表如何连接和连接的顺序。
3.1 执行explain命令,进行分析
执行计划字段解释
3.2 对字段取值解释
1. id
2. select_type
3. type
结果由好到坏
4. key
5. rows
6. filtered
总结这篇文章可以分为三个点。
1 往数据库导入一千万数据,查看上面文章,按照步骤操作没有任何问题。
2 查找慢查询语句,查看慢查询日志。按照命令执行就好
3 对sql执行进行分析,查看sql是否使用索引和执行效率。
原文地址:https://mp.weixin.qq.com/s/Z5CdTipX_UQO6xgA0ietFg
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
摘要:本文主要介绍如何详细解读GaussDB(DWS)产生的分布式执行计划,从计划中发现性能调优点。前言执行计划(又称解释计划)是数据库执行SQL语句的具体步骤
MySQL执行SQL会经过SQL解析和查询优化的过程,解析器将SQL分解成数据结构并传递到后续步骤,查询优化器发现执行SQL查询的最佳方案、生成执行计划。查询优
与数据库交互的基本语言是sql,数据库每次解析和执行sql语句多需要执行很多步骤。以sqlserver为例,当数据库收到一条查询语句时,语法分析器会扫描sql语
昨晚收到客服MM电话,一用户反馈数据库响应非常慢,手机收到load异常报警,登上主机后发现大量sql执行非常慢,有的执行时间超过了10s优化点一:SELECT*
数据库:30万条,有ID列但无主键,在要搜索的“分类”字段上建有非聚集索引过程T-SQL:复制代码代码如下:/*用户自定义函数:执行时间在1150-1200毫秒