当前位置:网站首页>有文章说明或者证明MYSQL 嵌套子查询不足之处吗?

有文章说明或者证明MYSQL 嵌套子查询不足之处吗?

2022-08-09 18:07:00 大明_数据库_指挥使

请问一下MySQL 5.7和MySQL 8.0 多级嵌套子查询能力怎么样

select xxx,sum(yyyy) from merchant_info sm LEFT JOIN merchant_report mr on mr.merchant_id=sm.merchant_idLEFT JOIN (          SELECT ss.salesman_id,ss.salesman_name,sa.salesman_name AS 'salesSupervisorName' 	FROM(              SELECT sm.salesman_id,sm.salesman_name,sa.sales_id AS 'salesSupervisorNo' 			  FROM(                  SELECT sm.salesman_id,sm.salesman_name,op.parent_id				  FROM sales_man sm                  LEFT JOIN sales_parent op ON sm.salesman_id=op.sales_id              )sm LEFT JOIN sales_operator sa ON sm.parent_id=sa.id          )ss LEFT JOIN sales_man sa ON ss.`salesSupervisorNo`=sa.salesman_id      ) ss ON sm.salesman_id=ss.salesman_id      where 1=1                      and mr.sales_ID IN           (                '1'           ,               '2'           ,               '3'           ) 


其中 嵌套进去的子查询,目标是形成 销售姓名,销售领导ID,销售员ID,销售员姓名


当心嵌套子查询的执行计划是否稳定, 因为这个嵌套子查询要应用到多个大表的查询里面去.


虽然MYSQL 规范 JION不要超过3张表, 使用阿里云的RDS FOR MYSQL 感觉没有什么特别慢的地方




采纳答案1:

mysql子查询最大的不足,就是优化器没有做进一步的优化,比如没有考虑子查询外部的WHERE条件,而是直接根据SQL的写法生成临时表,当子查询数据量大时造成性能问题。

对于这个SQL,在生产环境explain看下执行计划,就知道RDS for mysql是否做了优化。

至于是否稳定:mysql优化器会根据成本计算选择一个“最优”的执行计划,大部分情况下它的选择都没有问题。



其他答案1:

mysql子查询最大的不足,就是优化器没有做进一步的优化,比如没有考虑子查询外部的WHERE条件,而是直接根据SQL的写法生成临时表,当子查询数据量大时造成性能问题。

对于这个SQL,在生产环境explain看下执行计划,就知道RDS for mysql是否做了优化。

至于是否稳定:mysql优化器会根据成本计算选择一个“最优”的执行计划,大部分情况下它的选择都没有问题。


其他答案2:

从上面的语句来看。 8.x版本多半使用了派生表合并。

你可以执行show warnings来看看


其他答案3:

谢谢


其他答案4:
原网站

版权声明
本文为[大明_数据库_指挥使]所创,转载请带上原文链接,感谢
https://www.modb.pro/issue/15939