linux

如何在MySQL中筛选全表扫描的SQL查询

发布时间:5年前热度: 5817 ℃评论数:

描述

提问如何在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为打开

手机扫码访问