您的位置:首页 > 其它

连表查询时,from后子句的执行顺序和优化

2010-07-02 19:08 190 查看
今天我遇到一个面试题:from后面的子句,它的执行顺序是从左向右还是从右向左?如何进行优化?

我猛然的愣住了,因为我毕竟不是专搞数据库的,我只能凭感觉说出了从右向左。至于为什么,我也说不出来个所以然。

后来和专搞数据库的同事商量了一下,大概做出了如下结论:

比如一个sql查询语句:

select * from A , B ,C where A.***=B.*** and B.###=C.###

那么oralce在执行的时候,from后的A,B,C到底是一个怎么样的执行顺序呢?

这一查询的连接顺序是A->B->C。

事实上,Oracle首先将C散列进入内存,然后将A散列进入内存,然后开始读B。对于B的每一行,Oracle探查A散列寻找匹配,因此第一个连接是A->B;如果第一个探查是成功的,那么Oracle探查C散列寻找匹配,因此第二个连接是B->C—— 虽然从技术上讲我们应该说第二个连接是(A->B)->C。

所以优化的时候应该是数据量大的表放在前面。

以上是我在不懂装懂的拙论。欢迎大家批评.......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: