mysql 分析查询语句,MySQL教程之SQL语句分析查询优化
怎么获取有功能问题的SQL
1、经过用户反应获取存在功能问题的SQL
2、经过慢查询日志获取功能问题的SQL
3、实时获取存在功能问题的SQL
运用慢查询日志获取有功能问题的SQL
首要介绍下慢查询相关的参数
1、slow_query_log 发动定制记载慢查询日志
设置的办法,能够经过MySQL指令行设置set global slow_query_log=on
或许修正/etc/my.cnf文件,增加slow_query_log=on
2、slow_query_log_file 指定慢查询日志的存储途径及文件
主张日志存储和数据存储分隔存储
3、long_query_time 指定记载慢查询日志SQL履行时刻的阈值
① 记载一切契合条件的SQL
② 数据修正句子
③ 包含查询句子
④ 现已回滚的SQL
留意:
时刻能够精确到微秒,存储的单位是秒,默许值为10秒,例如咱们想查询1微秒的值,这儿就要设置成0.001秒
4、log_queries_not_using_indexes 是否记载未运用索引的SQL
5、log_output 设置慢日志查询的保存格局(假如需求保存为文件请修正成FILE)
慢查询运用日志中记载的信息
1、榜首行记载的信息为运用sbtest做的测验
2、第二行记载的信息为慢查询日志的时刻
3、第三行记载的信息为所运用锁的时刻
4、第四行记载的信息为回来的数据行数
5、第五行记载的信息为扫描数据的行数
6、第六行记载的信息为时刻戳
7、第七行记载的信息为查询的SQL句子
运用慢查询获取有功能问题的SQL
常运用的慢查询日志剖析东西(mysqldumpslow)
介绍:汇总除查询条件外其他完全相同的SQL,并将剖析成果依照参数中所指定的次序输出
慢查询日志实例
慢查询的相关装备设置
指令行履行参数检查剖析的成果
]# cd /var/lib/mysql/log]# mysqldumpslow -s r -t 10 slow-mysql
常运用的慢查询日志剖析东西(pt-query-digest)
运用东西前,需求先装置该东西,假如已有,可略过下面的装置进程
1、perl模块
]# yum install -y perl-CPAN perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-mysql perl-Digest-MD5
2、切换至src目录下载rpm包
]# cd /usr/local/src
]# wget https://www.percona.com/downloads/percona-toolkit/3.0.7/binary/redhat/7/x86_64/percona-toolkit-3.0.7-1.el7.x86_64.rpm
3、装置东西包
]# rpm -ivh percona-toolkit-3.0.7-1.el7.x86_64.rpm
履行指令剖析慢查询日志
]# pt-query-digest --user=root --password=redhat --host=127.0.0.1 slow-mysql > slow.rep
剖析的成果如下
MySQL服务器处理查询恳求的整个进程
1、客户端发送SQL恳求给服务器
2、服务器检查是否存在在缓存服务器中射中该SQL
3、服务器端进行SQL解析,预处理,再由优化器对应履行计划
4、依据履行计划,调用存储引擎API来查询数据
5、将成果回来给客户端
查询缓存对SQL功能的影响
1、优先检查整个查询是否射中查询缓存中的数据
2、经过一个对大小写灵敏的哈希查找完成的
查询缓存的优化参数
query_cache_type 设置查询缓存是否可用
ON,OFF,DEMAND
留意:DEMAND表明只要在查询句子中运用SQL——CACHE和SQL_NO_CACHE来操控是否需求缓存
query_cache_size 设置查询缓存的内存大小
query_cache_limit 设置查询缓存可用存储的最大值
query_cache_wlock_invalidate 设置数据表被锁后是否回来缓存中的数据(默许是封闭的,主张也是封闭的此选项)
query_cache_min_res_unit 设置查询缓存分配的内存块最小的值
会形成MySQL生成过错的履行计划的原因
1、计算信息不精确
2、履行计划中的本钱预算不等同于实践的履行计划的本钱
3、MySQL优化器所以为的最优可能与你所以为的最优不一样
4、MySQL从不考虑其他并发的查询,这可能会影响当时查询数据
5、MySQL有时候也会依据一些固定的规矩来生成履行计划
6、MySQL不会考虑不受其操控的本钱
MySQL优化器可优化的SQL类型
1、从头界说表的相关次序
优化器会依据计算信息来决议表的相关次序
2、将外链接转换成内衔接
where条件和库表结构等
3、运用等价改换规矩
(5=5 and a > 5)将会被改写成 a > 5
4、优化count(), min()和max()
select tables optimized away
优化器现已从履行计划中移除了该表,并以一个常数取而代之
5、将一个表达式转换为常数表达式
6、运用等价改换规矩
7、子查询优化
8、对in()条件进行优化
怎么确认查询处理各个阶段所耗费的时刻
运用profile set profiling = 1;
履行查询: showprofiles; show profile forqueryN; 查询的每个阶段所耗费的时刻
运用profile检查句子所耗费的时刻
特定的SQL查询优化
1、运用主从切换的原理进行大表的表结构修正,例如,现在从服务器上修正,修正结束今后,进行主从切换,再在本来老的主上进行大表的修正,存在必定的危险。2、在主服务器上创建于一个新的表,表结构便是即将修正大表后表结构,再把老表的数据从头导入到新表中,并在老表中树立一系列的触发器,把老表的数据同步更新到新表中,当老表中的数据悉数同步到新表今后,再对老表加排它锁,把新表改成老表的称号,删去重命名的老表,如下图所示
运用pt-online-schema-change指令来修正大表,具体操作如下图所示
上图的参数解说
--alter 所运用的sql句子
--user 数据库的登录用户
--password 登录用户的暗码
D 指定一切修正表的数据库称号
t 表的称号
--charset 指定数据库的字符串
--excute 履行
作者:demon_gdy
mysql 分析查询语句,MySQL教程之SQL语句分析查询优化相关推荐
- mysql查阅某个日期的语句_mysql查询指定日期时间内的sql语句及原理
查询指定日期时间内的sql语句的实现原理: 如果是月份就是当前的月减去你要统计的时间,比如要查询数据库中从今天起往前三个月的所有记录. 另外,在数据库设计阶段,要注意时间字段为int(11),保存在数 ...
- c mysql查询年月日_mysql查询指定日期时间内的sql语句及原理
查询指定日期时间内的sql语句的实现原理: 如果是月份就是当前的月减去你要统计的时间,比如要查询数据库中从今天起往前三个月的所有记录. 另外,在数据库设计阶段,要注意时间字段为int(11),保存在数 ...
- MySQL查询本年的数据的sql语句
MySQL查询本年的数据的sql语句: SELECT * FROM 表名 WHERE YEAR(时间字段)=YEAR(NOW());
- mysql查看cpu使用高sql语句_查询CPU占用高的SQL语句
触发器造成死锁.作业多且频繁.中间表的大量使用.游标的大量使用.索引的设计不合理.事务操作频繁.SQL语句设计不合理,都会造成查询效率低下.影响服务器性能的发挥.我们可以使用sql server自带的 ...
- 经典MySQL语句大全和常用SQL语句命令的作用。
转载自 http://blog.csdn.net/suyu_yuan/article/details/51784893 转自网络: 经典MSSQL语句大全和常用SQL语句命令的作用 下列语句部分是M ...
- mysql突然出现慢sql_Mysql开启慢SQL并分析原因
第一步.开启mysql慢查询 方式一:修改配置文件 Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:\Windows 下. Linux:Linux ...
- mysql执行sql语句按钮_mysql执行sql语句过程
开发人员基本都知道,我们的数据存在数据库中(目前最多的是mysql和oracle,由于作者更擅长mysql,所以这里默认数据库为mysql),服务器通过sql语句将查询数据的请求传入到mysql数据库 ...
- Mysql学习笔记(基础)基础sql语句详细记录
数据库学习(基础) // 个人网课学习记录,如果有违规等问题,请联系我删除~ mysql下载安装( 解压版安装配置 下载版安装配置 ) 需求分析:使用cmd命令来创建一个数据库,并对数据库中得一张分类 ...
- 视图的重命名mysql语句_sql语句重命名字段-视图重命名sql语句-数据库重命名sql语句...
sql语句如何重命名表名和列名? 一.更改数据库名 sp_renamedb 更改数据库的名称. 语法: sp_renamedb [ @dbname = ] ' old_name ' , [ @newn ...
最新文章
- linux shell读取文件,Linux shell逐行读取文件的方法
- Python基础练习题:猜数字小游戏
- .git文件夹_将Git存储库中的文件夹转换为全新的存储库
- 【案例分享】crontab执行脚本异常问题
- NOIP练习赛题目5
- 音乐人高嘉丰在 Opensea 发布音乐 NFT
- vscode web版搭建_VS Code 1.40 发布!可自行搭建 Web 版 VS Code!
- 访问控制基础(DAC,MAC,RBAC,ABAC,BLP)
- 圣诞老人python代码_用Python画圣诞老人的N种方法
- 孩子早餐要吃好,如何为孩子准备营养早餐
- webservice 缺少根元素_草莓种植,钙、硼元素十分重要,直接关系到草莓的产量和品质!...
- 来,教你开发一款图形编辑器
- Error C4668 : ‘USE_RTTI‘ is not defined as a preprocessor macro, replacing with ‘0‘ for ‘#if/#elif‘
- 故宫元宵节首开夜场,票务系统HTTPS加密护航 1
- 工厂生产管理流程有哪些环节?
- 五子棋-完美解决闪屏问题版-新增悔棋功能(C++实现)
- attention综述论文阅读:An Overview of the Attention Mechanisms in ComputerVision
- 职业学校计算机专业总结,职业学校期末总结范文
- Android 基于Zxing的扫码功能实现(二)
- 求两个数的平均值(三种方法)
热门文章
- rabbitmq 集群 ha负载 Consumer raised exception, processing can restart if the connection factory
- springboot2 配置redis报错 redis timeout Value not a valid duration解决办法
- Oracle查询所有序列
- Vue3 --- vue-router4 编程导航
- 获取redis中以某些字符串为前缀的KEY列表
- java8 lambda maplist排序_「java8系列」流式编程Stream
- electron 打包把node代理服务打包进去_专题:让C++给node做技术加持(三)编译electron本地模块踩坑记
- C++实现单链表的反序
- Python 递归函数 - Python零基础入门教程
- CTF工具-gdb插件peda,pwndbg安装