索引 - 索引ノード レコード

定義されたキーごとに、完全かつ独立した索引が作成されます。この索引は、索引ノード レコードのツリーで構成されます。各索引ノード レコードには、索引ファイルに書き込まれているデータ レコードに関連する実際のキー値が含まれます。ノード内の各キー値は、従属索引ノード レコード (リーフ ノードの場合は、キーに関連付けられたデータ レコード) の開始位置を指します。

最上位レベルのノード レコードは、ルートと呼ばれます。

デフォルトのノード サイズは 1024 バイトですが、ファイルに定義されている最大キー サイズによって変更される場合もあります。最大キーが 238 バイトより大きい場合、ノード サイズは 4096 バイトになります。

注: デフォルトのノード サイズは変更可能です。XFHNODE 環境変数を、512、1024 (デフォルト)、または 4096 バイトのいずれかに設定します。ただし、XFHNODE を 512 に設定した場合に最大のキー値が 120 バイトを超えると、XFHNODE の値が 1024 で上書きされます。また、XFHNODE を 512 または 1024 に設定した場合に最大のキー値が 248 を超えると、XFHNODE の値が 4096 で上書きされます。XFHNODE の設定は、ファイルが作成された時点でのみ有効です。既存のファイルのノード サイズは変更できません。

索引ノード レコードには、次のフィールドがあります。

サイズ フィールドの説明
2
ビット 15
セキュリティ フラグ。この値は、後続のセキュリティ フラグの値と一致している必要があります。
ビット 14 から 0
このレコードの先頭を基準として、レコード内の最終キー値ブロックの末尾を指すポインター
n キー値ブロック
...  
n キー値ブロック
1 索引番号

値は、同じ索引ツリーに属するすべてのノードについて同じです。主キーの場合は、ゼロが含まれます。

1
ビット 7
セキュリティ フラグ。この値は、先行するセキュリティ フラグの値と一致している必要があります。
ビット 6 から 0
このノードのレベル。リーフ ノードはレベル 0 です。

キー値ブロックには、次のフィールドが含まれます。

サイズ フィールドの説明
1 先頭文字の圧縮が可能な場合のみ存在します。このフィールドには、前のキーと同じ先頭文字のカウントが含まれます。この値は、ノードの最初のキーについては常に 0 になります。
1 後続空白文字の圧縮が可能な場合のみ存在します。このキー値の後続空白文字のカウントが含まれます。
n キー値
duplicate-occurrence オプションの重複出現番号。詳細については、「索引ファイルの種類」のトピックを参照してください。このフィールドは、このキーに重複が許可されている場合にのみ存在します。これには、重複出現カウントが含まれます。格納されている重複する最初のキーでは、このフィールドは 1 に設定されます。2 番目の重複では、このフィールドが 2 に設定されます。
file-pointer-size
MSB
重複キーの圧縮が有効な場合は、予約済みフィールドになります。次のキー値ブロックが現在のブロックと重複する場合に設定されます。
残りのビット
リーフ ノードである場合は、データ ファイル内のデータ レコードのアドレスになります。それ以外の場合は、索引の従属索引ノード レコードのアドレスになります。