SASハッシュテーブルのバケットの定義について少し説明したいと思います。問題は、まさにhashexpパラメーターに関するものです。
SAS DOCによると、hashexpは次のとおりです。
ハッシュオブジェクトの内部テーブルサイズ。ハッシュテーブルのサイズは2nです。
HASHEXPの値は、ハッシュテーブルサイズを作成するための2の累乗指数として使用されます。たとえば、HASHEXPの値4は、ハッシュテーブルサイズ24または16に相当します。HASHEXPの最大値は20です。
ハッシュテーブルのサイズは、保存できるアイテムの数と同じではありません。ハッシュテーブルを「バケット」の配列として想像してみてください。ハッシュテーブルのサイズが16の場合、16個の「バケット」があります。各バケットは、無限の数のアイテムを保持できます。ハッシュテーブルの効率は、アイテムをバケットにマップしたり、バケットからアイテムを取得したりするハッシュ関数の機能にあります。
ハッシュオブジェクトルックアップルーチンの効率を最大化するには、ハッシュオブジェクト内のデータ量に関連するハッシュテーブルサイズを設定する必要があります。最良の結果が得られるまで、さまざまなHASHEXP値を試してください。たとえば、ハッシュオブジェクトに100万個のアイテムが含まれている場合、16のハッシュテーブルサイズ(HASHEXP = 4)は機能しますが、あまり効率的ではありません。ハッシュテーブルのサイズが512または1024(HASHEXP = 9または10)の場合、最高のパフォーマンスが得られます。
問題は、ハッシュオブジェクトのデータ量ではないのに、ハッシュテーブルのサイズは正確には何であるかということです。
必要なだけのメモリを割り当てたいと理解する必要がありますが、それ以上ではありません。物事を速く動かすのは2の力です。ただし、使用される可能性のあるデータの量を制限するものではなく、使用されるデータの量を示すだけですよね?