oracle中left join (或者right join)与hash join/nest loop 之间是什么关系?有何区别
展开全部
怎么说呢?一个是你的目的,一个是你的方法。
就好像你要去一个地方玩,有三个地方可以选择,也就是left join或者right join(不是十分恰当,但是大概可以这么理解)
那么你怎么去呢?汽车,公交车,开车,走路,这个去的方法就是hash join/nested loop。
可是如果你的距离比较近,比如走路5分钟就能到达的公园,你会选择公交车或者打车么,一般不会,都会走路,也就是说某些目的,是有固定的方法的。
具体的方法有时会根据数据量的不同而不同,因为oracle默认会根据“最小成本原则”进行选择,具体的选择则方式是oracle的内部算法,我并不知道。
不过“最小成本”并不是最快速度,有时你强制一种方法比“最小成本”要快的多,所以要看你认为的“成本”可能是时间,可是oracle认为“成本”是cpu内存等等,那么这个选择就不同了。就好像,你去一个走路需要15分钟的公园,如果没什么事,有很多时间,那么你可能走路过去,也就是说你不在乎“时间成本”。可是如果你的女朋友限你三分钟内赶到,你就可能打车了,这时你在乎的是“时间成本”不在乎的是“金钱成本”。这二者和oracle和你选择的方法有些类似。
例子是现想的可能有点出入,不过大体上差不多。
就好像你要去一个地方玩,有三个地方可以选择,也就是left join或者right join(不是十分恰当,但是大概可以这么理解)
那么你怎么去呢?汽车,公交车,开车,走路,这个去的方法就是hash join/nested loop。
可是如果你的距离比较近,比如走路5分钟就能到达的公园,你会选择公交车或者打车么,一般不会,都会走路,也就是说某些目的,是有固定的方法的。
具体的方法有时会根据数据量的不同而不同,因为oracle默认会根据“最小成本原则”进行选择,具体的选择则方式是oracle的内部算法,我并不知道。
不过“最小成本”并不是最快速度,有时你强制一种方法比“最小成本”要快的多,所以要看你认为的“成本”可能是时间,可是oracle认为“成本”是cpu内存等等,那么这个选择就不同了。就好像,你去一个走路需要15分钟的公园,如果没什么事,有很多时间,那么你可能走路过去,也就是说你不在乎“时间成本”。可是如果你的女朋友限你三分钟内赶到,你就可能打车了,这时你在乎的是“时间成本”不在乎的是“金钱成本”。这二者和oracle和你选择的方法有些类似。
例子是现想的可能有点出入,不过大体上差不多。
追问
最近弄懂了,左连接是逻辑功能上的概念,哈希连接是物理结构上具体的实现方法~你写的挺多的,分给你了吧~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询