索引のスペース所要量
索引を設計するときは、そのスペース所要量について留意する必要があります。 圧縮索引の場合、このトピックの公式から導き出した見積もりを上限として使用できますが、それはかなり小さくなる可能性があります。
非圧縮索引のスペース所要量
- (平均索引キー・サイズ + 索引キー・オーバーヘッド) × 行数 × 2
- NULL 値が可能な列の場合は、NULL 値標識のために 1 バイトをさらに追加してください。
- マルチディメンション・クラスタリング (MDC) 表または挿入時クラスタリング (ITC) 表のために内部で作成されたブロック索引の場合、
number of
(行数) をnumber of blocks
(ブロック数) で置き換えることになります。 - ランダムな配列を使用する列については、それぞれに 2 バイトを追加してください。
XML 索引のスペース所要量
- (平均索引キー + 索引キー・オーバーヘッド) × 索引付きノードの数 × 2
索引作成の一時スペース所要量
- (平均索引キー・サイズ + 索引キー・オーバーヘッド) × 行数 × 3.2
- (平均索引キー・サイズ + 索引キー・オーバーヘッド) × 索引付きノードの数 × 3.2
3.2という係数は、索引のオーバーヘッド、および索引作成時のソートに必要なスペースに起因します。 「number of rows (行数)」または「number of indexed nodes (索引ノード数)」は、表全体または特定のデータ・パーティション内の数です。
- 平均索引キー・サイズ × 索引付きノードの数 × 1.2
リーフ・ページ当たりのキーの数の見積もり
索引リーフ・ページごとのキーの数を見積もるために、以下の 2 つの公式を使用できます (2 番目の方がより正確な見積もりが可能です)。 これらの見積もりの精度は、 平均値がどの程度うまく実際のデータを反映しているかに大きく依存しています。
- リーフ・ページ当たりのキーの数の平均値は、おおよそ以下のように見積もることができます。
- ((.9 * (ウー - (分×2))) × (D 日 + 1)) ÷ (K + 7 + (データ・セット × D 日))
- U (ページでの使用可能なスペース) は、ページ・サイズから 100 を引いた数値とほぼ等しい。 例えば、ページ・サイズが 4096 の場合、U は 3996。
- M = U ÷ (9 + minimumKeyサイズ)
- Ds = duplicateKeySize (
索引作成の一時スペース所要量
にある注を参照。) - D = キー値当たりの重複の平均数
- K = averageKeyサイズ
注: minimumKeySize および averageKeysize には、以下の追加情報を含める必要があります。- NULL 可能なそれぞれのキー・パーツに対して 1 バイト
- 可変長キー・パーツそれぞれの長さに対して 2 バイト
- ランダムな順序付けで定義されているそれぞれの列に対して 2 バイト
組み込み列がある場合は、 それらを minimumKeySize と averageKeySize 用に計算に入れる必要があります。
「minimum key size (最小キー・サイズ)」は、索引を構成しているキー・パーツの合計です。- fixed overhead + variable overhead + sql-data-type のバイト・カウント
- 「fixed overhead (固定オーバーヘッド)」は 13 バイトです。
- 「variable overhead (可変オーバーヘッド)」は、索引付きノードの最小の深さに 4 バイトを加算した値です。
- 「byte count of sql-data-type (sql-data-type のバイト・カウント)」値は、SQL と同じ規則に従います。
索引の作成時にデフォルト値の 10% 以外の空きパーセント値が指定された場合、
.9
は任意の (100-pctfree)/100 値に置き換えることができます。 - リーフ・ページ当たりのキーの数の平均値をより正確に見積もるには、以下のようにします。
- リーフ・ページ数 = x /(リーフ・ページの平均キー数)
XML 列の索引の場合、x は列内にある索引付きノードの総数です。
次のようにして索引の元のサイズを見積もることができます。- (L + 2L/(リーフ・ページのキーの平均数)) × pagesize
DMS 表スペースの場合、1 つの表上のすべての索引について合計サイズを算出し、 索引が存在する表スペースのエクステント・サイズの倍数に切り上げます。
挿入 (INSERT) /更新 (UPDATE) アクティビティーによる索引の増加のための追加スペースを設ける必要がありますが、これによりページの分割が生じる場合があります。
元の索引サイズのより正確な見積もりと、 索引の中のレベルの数の見積もりを出すには、以下の計算式を使用します。 (これは、索引定義で組み込み列が使用されている場合は特に注意を引くものとなります。) ノンリーフ・ページ当たりのキーの数の平均値は、おおよそ以下のようになります。- ((.9 × (U -(M × 2))) × (D + 1)) ÷ (K + 13 + (9 * D))
- U (ページでの使用可能なスペース) は、ページ・サイズから 100 を引いた数値とほぼ等しい。 ページ・サイズが 4096 の場合、U は 3996。
- D はノンリーフ・ページ上のキー値あたりの平均重複数 (この数はリーフ・ページ上での数よりもずっと小さいので、この値を 0 に設定して計算を単純化することもできます)。
- M = U ÷ (9 + ノンリーフ・ページの minimumKeySize)
- K = ノンリーフ・ページの averageKeySize
ノンリーフ・ページの minimumKeySize および averageKeySize は、 組み込み列が存在する場合を除いて、リーフ・ページのものと同じです。 組み込み列は、ノンリーフ・ページ上には保管されません。
(100 - pctfree)÷100 の値が .9 より大きくなければ、この値を .9 で置き換えることはできません。なぜなら、索引作成中に最大 10 % のフリー・スペースがノンリーフ・ページに残されるからです。
ノンリーフ・ページの数は、次のようにして見積もることができます。
ここで、if L > 1 then {P++; Z++} While (Y > 1) { P = P + Y Y = Y / N Z++ }
- P はページの数 (初期値は 0)。
- L はリーフ・ページの数。
- N は各ノンリーフ・ページのキーの数。
- Y = L ÷ N
- Z は索引ツリーのレベルの数 (初期値は 1)。
注: 上記の計算は、単一の非パーティション索引、またはパーティション索引の単一の索引パーティションに適用されます。ページの合計数は、- T = (L + P + 2) × 1.0002
索引を作成するために必要なスペースの量は次のように見積もります。- T × ページ・サイズ