MySQL系列(六)--SQL优化

  前面讲了如何设计数据库表结构、存储引擎、索引优化等内存,这篇文章会讲述如何进行SQL优化,也是面试中关于数据库肯定会被问到的,

这些内容不仅仅是为了面试,更重要的是付诸实践,最终用到工作当中

  之前的MySQL内存地址:MySQL系列内容

如何获取存在性能的SQL:

1、通过生产环境用户、测试人员反馈的应用响应速度较慢,可能就是SQL性能较差导致的

2、通过慢查询日志获取

3、实时获取存在性能问题的SQL

MySQL慢查日志:

参数:

  1、slow_query_log  是否启动慢查询日志,默认不开启,on/off,动态参数,运行时通过set global slow_query_log=on设置,也可以

通过脚本定时开关

  2、slow_query_log_file  日志存储和数据存储的文件名和路径,最好是自己设置,而不是默认,日志和数据文件要区分开

  3、long_query_time  慢查询日志SQL执行时间的阀值 单位s,默认10s,超过这个执行时间的SQL都会被记录下来,无论是查询还是修改,

还是记录已经回滚的SQL,最大精确到微妙ms,可以设置为1ms比较合适

  4、log_queries_not_using_indexes  是否记录未使用索引的SQL

慢查询日志常用分析工具:

1、MySQLdumpslow 官方推荐

  汇总除查询条件外其他完全相同的SQL,并将分析结果按照参数中所指定的顺序输出

mysqldumpslow -s r -t 10 mysql-slow.log;

-s order(c,t,l,r,at,al,ar)

输出结果排序方式:

c count查询总次数

t time总时间

l lock查询锁的时间

r row总数据行

加上a,就是取平均数

-t top指定取前几条作为结果输出

  

2、pt-query-digest 功能更强大一些

实时获取慢查询SQL:

SELECT ID,`user`,`HOST`,DB,COMMAND,TIME,STATE,INFO FROM information_schema.`PROCESSLIST` WHERE TIME >=60;

SQL处理查询请求的过程:

  1、客户端发送SQL给服务器

  2、服务器检查是否在查询缓存中命中该SQL

  可以设置是否使用查询缓存,内存大小等

  查询缓存对SQL查询的影响

  3、服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划

  4、然后存储引擎根据查询计划来查询数据

未完待续。。。

猜你喜欢

转载自www.cnblogs.com/huigelaile/p/11132624.html