IT必备技能php基础教程数据库

优化SQL的一般步骤

2019-12-10  本文已影响0人  JarvisTH

1.通过show status 了解各种SQL的执行频率
show [session|global] status来显示session级或者gobal级的统计结果。不写默认session。

show status like 'Com_%';

Com_xxx表示xxx语句执行次数,比较关心以下参数:

2.定位执行效率低的SQL语句

3.通过explain分析低效SQL执行计划
通过explain或者desc获取MySQL如何执行select语句的信息,包括select语句执行过程中表如何连接和连接顺序。

explain extended命令,通过explain extended加上show warnings,可以看到在SQL真正被执行前的优化器做的改写。在遇到复杂SQL时,可以利用MySQL extended的结果获取一个更加清晰的SQL。

通过explain partitions查看SQL访问的分区。

4.通过show profile分析SQL
通过参数have_profiling,能够看到当前MySQL是否支持profile。默认profiling是关闭的,可以使用set语句在session级别开启profiling;

select @@profiling;

set profiling=1;
show profiles
查询query id为2的执行过程中的线程状态

Sending data状态标识MySQL线程开始访问数据行并把结果返回给客户端,需要做大量磁盘读取操作。可以查询INFORMATION_SCHEMA.PROFILING表并按时间排序。

获取状态后,可以进一步选择all、cpu、block、context switch、page faults等明细类型查看MySQL在使用什么资源消耗时间高。

show profile cpu for query 2;

5.通过trace分析优化器如何选择执行计划
通过trace文件能够进一步了解优化器行为。
使用方式:首先打开trace,设置格式为json,设置trace最大内存;

set OPTIMIZER_TRACE="enabled=on",END_MARKERS_IN_JSON=on;

set OPTIMIZER_TRACE_MAX_MEN_SIZE=1000000;

接下来执行想做trace的SQL语句。
最后检查INFORMATION_SCHEMA.OPTIMIZER_TRACE就可以知道MySQL如何执行的。

6.确定问题并采取相应优化措施

上一篇下一篇

猜你喜欢

热点阅读