服务运行中,修改sql语句的方法

/ SQL / 0 条评论 / 2096浏览

情况描述

线上出现了性能问题,经过查询slow_log发现有条sql贼慢,explain sql,发现mysql优化器索引用选错。 那么如何能快速解决问题,不用重新部署就成了关键话题。

方案

由于数据库升级到了5.7,这个版本出现线query_rewrite功能。

具体如下

insert into query_rewrite.rewrite_rules(pattern,replacement,pattern_database)values('select * from t where a=?','select * from t force index(a_index)  where a=?','testdb');
CALL query_rewrite.flush_rewrite_rules();

其中

select * from t where a=? 是查询慢的sql

参数用“?”代替

'select * from t force index(a_index) where a=?'

加上force index 括号里 是你打算让这条sql用的索引

再去执行 贼快