描述
提问如何在MySQL中筛选出全表扫描的SQL语句,而非通过explain命令一条条SQL语句进行查看。
解决方案
1、设置long_query_time时间足够大,尽量让非全表扫描且执行时间长的SQL语句不记录到慢查询日志(slow log)中;
设置log_queries_not_using_indexes=on;
至此全表扫描的SQL语句被记录到slow log中,值得注意的是,执行时间超过long_query_time的SQL语句也将记录到slow log中,无论该SQL语句是否使用索引。
2、使用Percona Toolkit的pt-query-digest工具。
知识点
1、long_query_time参数含义:
设置记录到slow log中的SQL语句执行时间的最小值,即执行时间超过该值的SQL语句被记录到slow log中;前提为slow log为开启状态,否则该参数失效。
2、log_queries_not_using_indexes参数含义:
将没有使用索引的SQL语句记录到slow log中;前提为slow log为打开