在MySQL中,会引发性能问题的慢查询,大体有以下三种可能:
- 索引没有设计好;
- 通过紧急创建索引来解决。
- 比较理想的是能够在备库先执行。假设你现在的服务是一主一备,主库A、备库B,这个方案的大致流程是这样的:
- 在备库B上执行 set sql_log_bin=off,也就是不写binlog,然后执行alter table 语句加上索引;
- 执行主备切换;
- 这时候主库是B,备库是A。在A上执行 set sql_log_bin=off,然后执行alter table 语句加上索引。
- 在备库B上执行 set sql_log_bin=off,也就是不写binlog,然后执行alter table 语句加上索引;
- SQL语句没写好;
- 可以通过改写SQL语句来处理。MySQL 5.7提供了query_rewrite功能,可以把输入的一种语句改写成另外一种模式。
- MySQL选错了索引。
- 应急方案就是给这个语句加上force index