新浦京81707con > 功能介绍 > Hash Join与NLJOIN及MSJOIN

原标题:Hash Join与NLJOIN及MSJOIN

浏览次数:184 时间:2019-11-20

Hash Join与NLJOIN及MSJOIN

一、NLJOIN
对于被连接的数码子集很小的情事,nested loop连接是个较好的取舍。nested loop即是扫描三个表,每读到一条记下,就依附目录去另三个表里面查找,未有索引日常就不会是 nested loops。
诚如在nested loop中, 驱动表知足条件结果集超小,被驱动表的连年字段要有目录,那样就走nstedloop。尽管驱动表再次来到记录太多,就不合乎nested loops了。即使总是字段未有索引,则切合走hash join,因为无需索引。
Inner table被Outer table驱动,outer table重临的每生机勃勃行都要在inner table中探寻到与之合营的行。
Outer table: 小表、驱动表
Inner table: 被驱动表、大表 (可用ordered提醒来退换CBO暗中认可的驱动表,可用USE_NL(table_name1 table_name2)提醒来强制行使nested loop。)
二、HSJOIN
Hash join是CBO 做大数据集连接时的常用方式。优化器扫描小表(或数据源卡塔尔,利用连接键(也正是依附连年字段计算hash 值卡塔 尔(阿拉伯语:قطر‎在内部存储器中确立hash表,然后扫描大表,每读到一条记下就来探测hash表叁回,搜索与hash表相配的行。
当小表可以整个归入内存中,其花销接近全表扫描八个表的本金之和。假诺表十分的大无法完全归入内部存款和储蓄器,这个时候优化器会将它划分成几何莫衷一是的分区,不能够放入内部存储器的片段就把该分区写入磁盘的不经常段,那时候要有一点都不小的不经常段进而尽量升高I/O 的性格。有时段中的分区都急需换进内部存款和储蓄器做hash join。那时花费左近于全表扫描小表 分区数*全表扫描大表的代价和。
至于八个表都进行分区,其好处是足以应用parallel query,正是七个经过同期对不一样的分区实行join,然后再统意气风发。但是复杂。
使用hash join时,HASH_AREA_SIZE开头化参数必得充裕的大,如若是9i,Oracle建议选取SQL专门的学业区自动处理,设置WOCR-VKAREA_SIZE_POLICY 为AUTO,然后调解PGA_AGGREGATE_TARGET即可。
以下法规下hash join大概有优势:
1.七个了不起的表之间的总是;
2.在二个伟大的表和三个小表之间的连接.
(可用ordered提示来改造CBO暗中同意的驱动表,可用USE_HASH(table_name1 table_name2)提醒来强制行使hash join。)
三、MSJOIN
新莆京投注网站,Sort merge join的操作日常分三步:
1.对一连的每一个表做table access full;
2.对table access full的结果根据连接键进行排序;
3.进展merge join对排序结果开展统生机勃勃。
Sort merge join品质支付差相当的少都在前两步。经常是在未曾索引的情况下,9i起来已经相当少现身了,因为其排序耗费高,大多为hash join代替了。 Usually, MSJOIN is used between 2 huge tables.
平常状态下Hash join的机能都比Sort merge join要好,可是朝气蓬勃旦行源已经被排过序,在实践sort merge join时不须求再排序了,那个时候sort merge join的习性会优于hash join。
在全表扫描美元引范围扫描再通过rowid举办表访谈更可取的情形下,sort merge join会比nested loops质量更佳。
DB2的有的版本现身了不当接受MSJOIN的标题(应该选拔HSJOIN或NLJOIN的情景卡塔 尔(阿拉伯语:قطر‎。
透过改善DB2的fix及将DB2_REDUCED_OPTIMIZATION变量设为CAP OFF来纠正。

Join与NLJOIN及MSJOIN 黄金时代、NLJOIN 对于被连续的数额子集不大的情事,nested loop连接是个较好的拈轻怕重。nested loop便是扫描二个表,每读到一条记...

本文由新浦京81707con发布于功能介绍,转载请注明出处:Hash Join与NLJOIN及MSJOIN

关键词: 新浦京81707con

上一篇:点出重点

下一篇:没有了