oracleのHASHJOINメソッドでは、HASH TABLEはテーブルの1つに構築され、他のテーブルはハッシュテーブルの値に応じて結合されます。
ハッシュテーブルとは何か教えていただけますか?ハッシュテーブルの構造は何ですか?どのように作成されますか?
oracleのHASHJOINメソッドでは、HASH TABLEはテーブルの1つに構築され、他のテーブルはハッシュテーブルの値に応じて結合されます。
ハッシュテーブルとは何か教えていただけますか?ハッシュテーブルの構造は何ですか?どのように作成されますか?
ハッシュテーブルは、キーを使用してデータを格納できるテーブルです。配列のようなものですが、保存方法が異なります
a('CanBeVarchar') := 1; -- A hash table
Oracleでは、これらは連想配列またはテーブルによるインデックスと呼ばれます。そしてあなたはこのようなものを作ります:
TYPE aHashTable IS TABLE OF [number|varchar2|user-defined-types] INDEX BY VARCHAR2(30);
myTable aHashTable;
それで、それは何ですか?これは、キーと値のペアの集まりにすぎません。データは、HashCodeと呼ばれるものを使用してデータをグループ化し、物事をより速く見つけるヘッドノードとのリンクリストとして保存されます。このようなもの:
a -> b -> c
Any Bitter Class
Array Bold Count
ランダムな単語を保存していて、その意味(辞書)があるとします。aで始まる単語を保存すると、「a」グループに保存されます。したがって、これが必要だとするとmyTable('Albatroz') := 'It's a bird'
、ハッシュコードが計算され、それが属するAヘッドノード(「Any」のすぐ上)に配置されます。a
、Anyへのリンクがあり、Anyへのリンクがあります。
さて、それについてのクールなことは、あなたがの意味が欲しいと言って、あなたが速いデータ検索を得るということですCount
、あなたはこれをしますdefinition := myTable('Count');
それはAny、Array、Bitter、Boldの検索を無視します。Cヘッドノードを直接検索し、クラスを通過して最後にカウントします。それは速いです!
ここにウィキペディアのリンクがあります:http://en.wikipedia.org/wiki/Hash_table
私の例は単純化されすぎており、リンクにもう少し詳細が含まれていることに注意してください。
負荷率などの詳細をお読みください。グループに多数の要素があり、bとcに少数の要素がある場合はどうなりますか。現在、aで始まる単語を検索することは、あまり適切ではありませんね。ハッシュテーブルは、負荷係数を使用して各ノードの負荷を再編成および分散します。たとえば、テーブルはサブグループに変換できます。
これから
a b -> c
Any Bitter Class
Anode Bold Count
Anti
Array
Arrays
Arrow
これに
an -> ar b -> c
Any Array Bitter Class
Anode Arrays Bold Count
Anti Arrow
今のような単語を探すのArrow
が速くなります。