MySQL客户端连接成功之后,通过show[session|global]status命令可以提供服务器状态信息,也可以在操作系统上使用mysqladmin extended-status命令获得这些消息。show[session|global]status可以根据需要加上参数"session"或"global"来显示session级(当期连接)的统计结果和global级(自数据库上次启动至今)的统计结果。如果不写,默认使用的参数是"session"
可以通过以下两种方式定位执行效率较低的SQL语句
通过以上步骤查询到低效率的SQL语句后,可以通过EXPLAIN或DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序
MySQL4.1开始引入了explain extended命令,通过explain extended加上show warnings,我们能够看到在SQL真正被执行之前优化器做了哪些SQL改写
在遇到复杂的SQL的时候,我们可以利用explain extended的结果来迅速的获取一个更清晰易读的SQL
MySQL5.1开始支持分区功能,同时explain命令也增加了对分区的支持。可以通过explain partitions命令查看SQL所访问的分区
MySQL从5.0.37版本开始增加了对show profiles和show profile语句的支持。通过have_profiling参数,能够看到当前MySQL是否支持profile
在获取到最消耗时间的线程状态后,MySQL支持进一步选择all、cpu、block io、context switch、page faults等明细类型来查看MySQL在使用什么资源上耗费了过高的时间
MySQL5.6提供了对SQL的跟踪trace,通过trace文件能够进一步了解为什么优化器选择A执行计划而不选择B执行计划,帮助我们更好地理解优化器的行为