Quantcast
Channel: Planet MySQL
Viewing all articles
Browse latest Browse all 1081

与友人就"子查询分解"技术的讨论

$
0
0

蓝色字体,回复的内容: 

MySQL对子查询的支持比那些套了个简单SQL壳的K/V系统要好得多,但是它基本上还是以迭代的方式来处理相关子查询。
---MySQL等数据库,把可优化的子查询上拉(即扁平化)为连接或半连接操作。
---子查询的消除,主要使用的是逻辑优化的方式;逻辑优化,使用关系代数+启发式规则,对SQL进行等价变换,这个过程,非迭代。MySQL原理如此,其他数据库原理也如此。
---而所谓“迭代”,是执行器对子查询的实现方式,即不可被优化的子查询,其执行过程,通常是迭代处理。但进入执行阶段,优化过程已经结束了。

select * from t1 where c1 = (select max(d1) from t2 where t1.c2 = t2.d2);
---这个例子见了好多次了,感兴趣的网友可搜索一下。
---所用示例,可能是DM的典型用例,能体现其长处,所以被反复使用。
--- 2014年3月曾引用+讨论过这样的例子,参见:http://blog.163.com/li_hx/blog/static/18399141320142239359546/
---还是个特例?

 


PlanetMySQL Voting: Vote UP / Vote DOWN

Viewing all articles
Browse latest Browse all 1081

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>