表从5.6迁移到5.7,发现查询变慢,explain 发现执行计划也不一样,百度发现是由于5.7的新特性derived_merge导致的:
5.6.40 不支持 derived_merge=on 反而执行计划里面有derived (执行快)
5.7.25 ubuntu16.04 支持 derived_merge=on 反而执行计划里面没有derived (执行慢)
那么数据库命令行执行 set GLOBAL optimizer_switch='derived_merge=on',发现执行后变快了几十倍,但再次执行还会变慢。
最后在mysqld.conf 里设置全局变量 optimizer_switch='derived_merge=OFF' 重启生效,不用每次执行set。
derived_merge 字面意思派生合并