首页 > 代码库 > mysql查询语句优化工具
mysql查询语句优化工具
把这个profiling功能打开,可以查看sql查询语句的整个过程中各种资源的消耗情况。
mysql> show profiles;
+----------+------------+---------------------------------+
| Query_ID | Duration | Query |
+----------+------------+---------------------------------+
| 1 | 0.00049600 | show variables like "profiling" |
| 2 | 0.02267400 | show databases |
| 3 | 0.04235200 | SELECT DATABASE() |
| 4 | 0.00012825 | SELECT DATABASE() |
| 5 | 0.00025125 | show databases |
| 6 | 0.00145125 | show tables |
| 7 | 0.04207925 | show tables |
| 8 | 0.03485225 | select count(*) from host_item |
+----------+------------+---------------------------------+
mysql> show profile cpu, block io for query 8;
+----------------------+----------+----------+------------+--------------+---------------+
| Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
+----------------------+----------+----------+------------+--------------+---------------+
| starting | 0.000634 | 0.000000 | 0.000000 | 0 | 0 |
| checking permissions | 0.000013 | 0.000000 | 0.000000 | 0 | 0 |
| Opening tables | 0.000051 | 0.000000 | 0.000000 | 0 | 0 |
| System lock | 0.000014 | 0.000000 | 0.000000 | 0 | 0 |
| init | 0.000015 | 0.000000 | 0.000000 | 0 | 0 |
| optimizing | 0.033657 | 0.000000 | 0.000000 | 40 | 0 |
| statistics | 0.000029 | 0.000000 | 0.000000 | 0 | 0 |
| preparing | 0.000012 | 0.000000 | 0.000000 | 0 | 0 |
| executing | 0.000006 | 0.000000 | 0.000000 | 0 | 0 |
| Sending data | 0.000313 | 0.000000 | 0.000000 | 0 | 0 |
| end | 0.000008 | 0.000000 | 0.000000 | 0 | 0 |
| query end | 0.000008 | 0.000000 | 0.000000 | 0 | 0 |
| closing tables | 0.000047 | 0.000000 | 0.000000 | 0 | 0 |
| freeing items | 0.000042 | 0.000000 | 0.000000 | 0 | 0 |
| logging slow query | 0.000003 | 0.000000 | 0.000000 | 0 | 0 |
| cleaning up | 0.000003 | 0.000000 | 0.000000 | 0 | 0 |
+----------------------+----------+----------+------------+--------------+---------------
show profile后面可以跟参数:all或者cpu,block io,page faults等。
也可以在information_schema.profiling数据库表中直接查询:
select state,sum(duration) as total_r,round(100*sum(duration)/(select sum(duration) from information_schema.profiling where query_id=@query_id),2) as pct_r,count(*) as calls,sum(duration)/count(*) as "r/call" from information_schema.profiling where query_id=@query_id group by state order by total_r desc;
最后,关闭set profiling=0该功能。
本文出自 “Victor的奋斗历程” 博客,请务必保留此出处http://victor2016.blog.51cto.com/6768693/1875012
mysql查询语句优化工具