2

oracleのHASHJOINメソッドでは、HASH TABLEはテーブルの1つに構築され、他のテーブルはハッシュテーブルの値に応じて結合されます。

ハッシュテーブルとは何か教えていただけますか?ハッシュテーブルの構造は何ですか?どのように作成されますか?

4

1 に答える 1

2

ハッシュテーブルは、キーを使用してデータを格納できるテーブルです。配列のようなものですが、保存方法が異なります

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が速くなります。

于 2012-11-03T19:46:23.923 に答える