1,mysql中,会引发性能问题的慢查询,大概有下述三种可能:
1)索引没设计好;
2)sql语句没有写好;
3)mysql选错了索引
1.1 对于索引没设计好导致的慢查询的解决方法:
由于mysql 5.6后 创建索引已经支持online ddl了,所以最高效的解决方法是直接执行alter table加索引。具体方法为:
1).在备库b上执行set sql_log_bin=off,即不写binlog,然后执行alter table语句加索引;
2).执行主备切换;
3).这时候主库是b,备库是a,在a上执行set sql_log_bin=off,然后执行alter table语句加上索引。
1.2 对于语句没写好导致的慢查询的解决方法:
改写sql语句。mysql 5.7提供了 query_rewrite功能,可以把输入的一种语句改写成另外一种语句模式。
比如:语句被错误地写成了 select * from t where id+1=1000; ,就可以通过下面的方式,增加一个语句改写规则:
insert into query_rewrite.rewrite_rules(pattern,replacement,pattern_database)values("select * from t where id+1=?","select * from t where id=?-1","db1");
call query_rewrite.flush_rewrite_rules();
其中,call query_rew