查看sql执行频率
SHOW STATUS LIKE 'Com_______'; -- 查询当前sql的执行频率
SHOW GLOBAL STATUS LIKE 'Com_______'; -- 查询mysql开启后sql的执行频率
SHOW GLOBAL STATUS LIKE 'Innodb_rows_%'; -- 查询innodb的sql影响数据的行数
开启慢查询日志,日志分析,定位慢查询sql
参考https://www.linuxidc.com/Linux/2019-01/156301.htm
查看慢查询sql执行计划,优化sql
EXPLAIN sql
SHOW STATUS LIKE 'handler_read%'; -- 显示了数据库处理SELECT查询语句的状态,对于调试SQL语句有很大意义
说明:
Handler_read_first 此选项表明SQL是在做一个全索引扫描,注意是全部,而不是部分,所以说如果存在WHERE语句,这个选项是不会变的。如果这个选项的数值很大,既是好事 也是坏事。说它好是因为毕竟查询是在索引里完成的,而不是数据文件里,说它坏是因为大数据量时,简便是索引文件,做一次完整的扫描也是很费时的。
Handler_read_key 此选项数值如果很高,那么恭喜你,你的系统高效的使用了索引,一切运转良好。
Handler_read_last The number of requests to read the last key in an index. With ORDER BY, the server will issue a first-key request followed by several next-key requests, whereas with ORDER BY DESC, the server will issue a last-key request followed by several previous-key requests. This variable was added in MySQL 5.6.1.
Handler_read_next 此选项表明在进行索引扫描时,按照索引从数据文件里取数据的次数。
Handler_read_prev 此选项表明在进行索引扫描时,按照索引倒序从数据文件里取数据的次数,一般就是ORDER BY … DESC。
Handler_read_rnd 简单的说,就是查询直接操作了数据文件,很多时候表现为没有使用索引或者文件排序。
Handler_read_rnd_next 此选项表明在进行数据文件扫描时,从数据文件里取数据的次数。