首页 > Linux操作系统 > Linux操作系统 > oracle 连接的类型
oracle 的连接的类型:
1)排序--合并连接(SMJ)
2)嵌套连接(NL)
3)哈希连接(HJ)
排序内部连接的过程:
(1)首先生成rowsource1 需要的数据,然后对这些数据按照连接操作关联列进行排序
(2) 随后生成rowsource2 需要的数据,然后对这些数据按照与sort source1对应的连接操作关联列进行排序。
(3)最后两天已排序的行被放在一起执行合并操作,即将2个row source按照连接条件连接起来。
下面是连接步骤的图形表示:
MERGE
SORT SORT
Row Source 1 Row Source 2
如果rowsource 已经在连接关联列上被排序,则该连接操作就不需要在进行sort操作,这样可以大大提高这种连接操作的连接速度,因为排序是个极其费资源的操作,特别是对于较大的表。
几种连接的比较:
排序--合并连接
a)对于非等值连接,这种连接方式的效率是比较高的
b)如果在关联的列上都有索引,效果更好
c)对于将两个较大的rowsource做连接,该连接方法比NL连接要好一些
d)但是如果sort merge 返回的rowsource过大,则又会导致使用过多的rowid在表中查询数据时,数据库性能下降,因为过多的I/O
嵌套循环
a)如果外部表比较的小,并且在内部表上有唯一的索引,或有高选择性非唯一索引时,使用这种方法可以得到较好的效率。
b)有点:可以先返回已经连接的行,而不必等待所有的连接操作处理才返回数据,
可以实现快速的响应时间。
哈希连接
a)效率应该好于其他2中连接,但是这种连接只能用在CBO优化器中,而且需要设置合适的hash_area_size 参数
b)在2个较大的row source之间连接时会取得相对较好的效率,在一个row source较小时则能取得更好的效率。
c)只能用于等值连接中
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23582874/viewspace-671120/ ,如需转载,请注明出处,否则将追究法律责任。