问题:
explain(desc) 解析执行语句,没有derived(派生表)
explain select * from (select * from (select * from t_user where id = 1) a ) b ;
通过解析可以看出,sql内部只进行了一部简单查询。并没有用到派生表。
原因:
mysql5.7针对于5.6版本做了一个优化,针对mysql本身的优化器增加了一个控制优化器的参数叫 derived_merge (派生类合并)。默认是开启状态。
当执行带有派生表的查询时,mysql内部进行优化,将派生表合并到外部查询里面。
关闭派生类合并
set global optimizer_switch='derived_merge=off';
参考 :https://blog.csdn.net/undefinedAuth/article/details/99291739