如何统计MySQL中语句执行次数并按总执行次数降序排序结果
MySQL SQL语句执行次数统计方案
你现有的查询仅实现了从通用日志中过滤增删改查类SQL的功能,要统计每条语句的执行次数并按次数降序排序,调整后的SQL如下:
SELECT CONVERT(argument USING utf8) AS sql_statement, COUNT(*) AS execute_total FROM mysql.general_log WHERE argument LIKE '%SELECT%' OR argument LIKE '%INSERT%' OR argument LIKE '%DELETE%' OR argument LIKE '%UPDATE%' GROUP BY sql_statement ORDER BY execute_total DESC;
可选优化说明
- 可以用REGEXP简化多条件匹配:将WHERE后的多个OR条件替换为
argument REGEXP 'SELECT|INSERT|DELETE|UPDATE',如果仅需要匹配以这四个关键字开头的语句,可调整为argument REGEXP '^(SELECT|INSERT|DELETE|UPDATE)',过滤更精准。 - 执行前可先运行
SHOW VARIABLES LIKE 'general_log';确认通用日志处于开启状态,值为ON才能正常获取日志数据。 - 若日志量较大,建议增加时间范围过滤条件缩小扫描范围,比如添加
AND event_time >= '2024-01-01 00:00:00'。 - 如果需要忽略SQL语句的大小写差异统计,可将分组条件改为
GROUP BY LOWER(sql_statement)。
内容的提问来源于stack exchange,提问作者c_minn
相关产品推荐
相关产品推荐

