MySQL Profiler使用

要想优化一条Query,我们就需要清楚的知道这条Query的性能瓶颈到底在哪里,是消耗的CPU计算太多,还是需要的的IO操作太多?

MySQL的Query Profiler是一个使用非常方便的Query诊断分析工具,通过该工具可以获取一条Query在整个执行过程中多种资源的消耗情况,如CPU,IO,IPC,SWAP等,以及发生的PAGE FAULTS,CONTEXT SWITCHE等等,同时还能得到该Query执行过程中MySQL所调用的各个函数在源文件中的位置。

1、打开profiling参数


mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

2、查询sql语句


mysql> select count(*) from t_crcs_check_diff;
+----------+
| count(*) |
+----------+
|    12608 |
+----------+
1 row in set (0.01 sec)

继续阅读MySQL Profiler使用

MySQL Explain使用

MySQL Query Optimizer通过我让们执行EXPLAIN命令来告诉我们他将使用一个什么样的执行计划来优化我们的Query。所以,可以说Explain是在优化Query时最直接有效的验证我们想法的工具。

在我们对某个Query优化过程中,需要不断的使用Explain来验证我们的各种调整是否有效。

一、我们先看一下在MySQL Explain功能中给我们展示的各种信息的解释:

1、ID:Query Optimizer所选定的执行计划中查询的序列号;

2、Select_type:所使用的查询类型,主要有以下这几种查询类型
1)DEPENDENT SUBQUERY:子查询中内层的第一个SELECT,依赖于外部查询的结果集;
2)DEPENDENT UNION:子查询中的UNION,且为UNION中从第二个SELECT开始的后面所有SELECT,同样依赖于外部查询的结果集;
3)PRIMARY:子查询中的最外层查询,注意并不是主键查询;
4)SIMPLE:除子查询或者UNION之外的其他查询;
5)SUBQUERY:子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集;
6)UNCACHEABLE SUBQUERY:结果集无法缓存的子查询;
7)UNION:UNION语句中第二个SELECT开始的后面所有SELECT,第一个SELECT为PRIMARY;
8)UNION RESULT:UNION中的合并结果;

继续阅读MySQL Explain使用