[DB] HashJoin
1684 ワード
NL結合の弱点を克服したハシュジョイ
バージョン7.3で初めて紹介したハッシュ結合は、パッケージ結合とNL結合が有効でない場合の代替案として開発された.
ハッシュ結合は、2つの小さな集合をBuild Inputに読み込み、ハッシュ領域にハッシュテーブルを作成し、もう1つの大きな集合をProbe Inputに読み込み、ハッシュテーブルを参照して結合します.
ないぶげんり
この特性により、build inputが小さい(パケットアドレスにリンクが少ない)状態は、ハッシュ結合の性能に有効である.
正確には、FPGAメモリに割り当てられたハッシュ領域に組み込むのに十分な大きさが必要である.この値を超えると、ディスクに書き込み、再取得する必要があるため、パフォーマンスが大幅に低下します.
なぜハッシュ結合が速いのですか?
ハッシュ結合がPGA領域に割り当てられるのは理由がある.
NL結合がOuterテーブルで読み取った各レコードはInnerページテーブルを繰り返しラッチを取得するが、ロック解除取得プロセスがない場合、PGAでデータをすばやく検索する.
ハッシュ結合のヒント.
select /*+ use_hash(d e) */ d.deptno, e.ename
from dept d, emp e
~~~
以上のヒントは、deテーブルのハッシュをチェックインすることを意味します.しかしハッシュ結合であることを明確に指摘し,順序は擎天柱によって決定される.
(小さいdeptテーブルをBuild Inputに設定します.)
ユーザーソートにはordered、leading swap join inputsなどのコマンドが使用されます.
select /*+ use_hash(d e) swap_join_inputs(e) */ d.deptno,
e.ename
deテーブルはハッシュ結合を行い、eテーブルをbuildinputとして指定します.ハッシュ結合のパフォーマンスキー
ハッシュ結合のサイズは、FPGAのハッシュ領域に含めることができるほど小さい.
ホイールチェーンが小さいほど効率が高くなります.
bucketチェーンのサイズは、ハッシュ値の繰返し値が小さいことを意味します.
たとえば、ハッシュ値の低いタイプ(受注日など)は、1つのbucketで多くのチェーンを生成します.
これは、NL結合でOuter Tableのインデックス先頭列が受注日であり、Inner Tableで受注番号で値を区切った場合と似ています.
Outer Tableで大量のランダムアクセスを生成し、結果値に不要な演算を生成します.
Reference
この問題について([DB] HashJoin), 我々は、より多くの情報をここで見つけました https://velog.io/@kw78999/DB-HashJoinテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol