🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
常用有三种方法: ## 1、show profile 在mysql 5.1 之后引入,默认是禁用的,可以通过以下命令开启: `mysql> set profiling=1;` 执行一些查询,然后再执行如下命令: ![](https://box.kancloud.cn/7dd64f4d84651b70c98b6f094e254771_673x155.png) 显示了精度很高的查询响应时间。 继续执行: ![](https://box.kancloud.cn/a286a06d905565991c492e20b970cce4_306x332.png) 显示查询执行的每个步骤及其花费的时间,但是是根据执行步骤排序,现在需要根据时间来排序: ~~~ mysql> 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; ~~~ ![](https://box.kancloud.cn/2bfae1a9a8cc3f7448f0da5fc1b18867_542x327.png) 可以看到花费时间最多的是打开数据表,其次是发送数据 ## 2、show status 首先清空一下 ` mysql> flush status;` 执行一下查询: `mysql> select * from cmf_course_drop where cid='9771510558193';` 执行:`mysql> show status where variable_name like 'handler%' or variable_name like 'created%';` ![](https://box.kancloud.cn/843a9949c67ffbf5b0d52f45c281a128_318x424.png) * Created_tmp_disk_tables 服务器在处理语句时在磁盘上创建的磁盘临时表个数。 * Created_tmp_files 服务器创建的临时文件个数。 * Created_tmp_tables 服务器在处理语句时创建的临时表个数。 * Handler_commit 请求提交事务的次数。 * Handler_delete 请求从表删除行的次数。 * Handler_external_lock 此变量与锁定操作数量有关,主要是在表访问的开始和结束时起作用。其值除以2,即为锁定操作的次数。该变量是在MySQL 5.6.2里引入的。 * Handler_mrr_init 有些存储引擎自己实现了“多范围读取”(Multi-Range Read)优化策略。此变量表示的是服务器使用该实现的次数。该变量是在MySQL 5.6.1里引入的。 * Handler_prepare 为两阶段提交所做的准备次数。 * Handler_read_first 请求从索引里读取第一行的次数。 * Handler_read_key 请求基于索引值读取行的次数。 * Handler_read_last 请求从索引里读取最后一行的次数。比变量是在MySQL 5.5.7里引入的。 * Handler_read_next 按索引顺序请求读取下一行的次数。 * Handler_read_prev 按索引逆序请求读取上一行的次数。 * Handler_read_rnd 根据位置请求读取一行的次数。 * Handler_read_rnd_next 请求读取下一行的次数。如果这个值很大,则说明你可能在执行大量的需要全表扫描的语句,或者执行大量的未正确使用索引的语句。 * Handler_rollback 请求事务回滚的次数。 ## 3、查看慢查询日志