17.1.3 インデクスの格納ページ数の計算方法

インデクスの格納ページ数の計算方法を(1)で説明します。(1)の計算式中で使用する変数については(2)で説明しています。インデクスの格納ページ数の計算例については(3)で説明しています。

なお,CREATE TABLEでクラスタキーを指定する場合,インデクスの格納ページ数を求める方法と同じ方法で,クラスタキーの格納ページ数を求めてください。

また,インデクスを横分割する場合,格納RDエリアごとにページ数を求めてください。

注意事項
インデクスページスプリットが発生すると,インデクスページ内のキーの格納比率を50:50にして二つのインデクスページに分割します。このため,インデクスの追加又は更新が多く発生すると,インデクスの格納ページ数は最大で見積もり式の2倍の容量が必要となります。また,最大キーが格納されたリーフページのインデクスページスプリットは,UAPからのINSERTであってもPCTFREEオペランドの値が考慮されます。
なお,インデクスページスプリットの発生回数を削減する方法の一つにアンバランスインデクススプリットがあります。インデクスページスプリット及びアンバランスインデクススプリットについては,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。
<この項の構成>
(1) 計算方法
(2) 計算式中で使用する変数
(3) インデクスの格納ページ数の計算例

(1) 計算方法

インデクスの格納ページ数は,次に示す計算式で求めます。

計算式

                      n
インデクスの格納ページ数(単位:ページ)= Σ Pi+Pd
                     i=1

Piは,計算式1に示す漸化式から求めます。

Pn=1となるまでPi+1の計算をし,その計算結果の総計を求めてください。

Pdは,キー値の重複が201以上の場合に計算します。Pdの求め方を計算式2に示します。

計算式1

[図データ]
計算式2

[図データ]
繰返し列を含むインデクスの場合の1行当たりの繰返し要素の重複数について
繰返し列を含むインデクスの場合,1行当たりの繰返し要素の重複数は,次に示す計算式の値を超えないようにしてください。
重複数=↓(↓a×0.95↓-82)÷4↓-1

(2) 計算式中で使用する変数

a:ユーザ用RDエリアのページ長(バイト)
b:CREATE INDEXで指定する未使用領域の比率※1(%)
c:キー値の重複が200以下のキーの種類の個数(個)※2,3,4
d:キー値の重複が200以下のキーの重複数の平均値(個)※3,5
e:キー値の重複が201以上のキーの種類の個数(個)※3,4
f:キー値の重複が201以上のキーの重複数の平均値(個)※3,5
g:DB格納キー長※6(バイト)
h:次に示すどちらかを代入します。
  • ユニークインデクスの場合:ナル値以外のキーの種類の個数(個)
    なお,複数列インデクスの場合は,構成列にナル値を含まない全キー数となります。
  • ユニークインデクス以外の場合:0
注※1
未使用領域の比率を指定しない場合は,30%を仮定して計算します。また,クラスタキーを指定する場合は,CREATE TABLEで指定する未使用領域の比率とします。
注※2
ユニークインデクスの重複がないキーを含める必要があります。
注※3
c×d+e×fの値が,インデクスのキーの総数以上になるように計算してください。
注※4
ユニークインデクスの重複があるキー(キー値にナル値を含むことで重複するキー)を含める必要があります。
注※5
小数点未満は整数値に切り上げてください。
注※6
表17-5 インデクスのキー長一覧」を参照してください。DB格納キー長は,次に示す計算式で求めます。
  • 単一列インデクス及び固定長複数列インデクスの場合
    ↑キー長÷4↑×4
  • 可変長複数列インデクスで,かつキー長255バイト以下の場合
    ↑(キー長+1)÷4↑×4
  • 可変長複数列インデクスで,かつキー長256バイト以上の場合
    ↑(キー長+2)÷4↑×4
ただし,複数列インデクスのキー長は,「表17-5 インデクスのキー長一覧」を基に全構成列のキー長を加算したものとなります。

表17-5 インデクスのキー長一覧

分類データ型キー長(単位:バイト)
キー長が255バイト以下キー長が256バイト以上
単一列
インデクス
複数列インデクス単一列
インデクス
複数列インデクス
固定長1可変長2固定長1可変長2
数値
データ
INTEGER45657
SMALLINT23435
LARGE DECIMAL
(m,n)3
↓m÷2↓
+1
↓m÷2↓+2↓m÷2↓+3↓m÷2↓+2↓m÷2↓+4
FLOAT又は
DOUBLE
PRECISION
8××××
SMALLFLT
又はREAL
4××××
文字
データ
CHARACTER
(n)
nn+1n+2nn+1n+3
VARCHAR(n)a+1a+2a+2a+3
各国
文字
データ
NCHAR(n)
又はNATIONAL CHARACTER
(n)
2×n2×n+12×n+22×n2×n+12×n+3
NVARCHAR
(n)
2×b+12×b+22×b+22×b+3
混在
文字
データ
MCHAR(n)nn+1n+2nn+1n+3
MVARCHAR
(n)
a+1a+2a+2a+3
日付
データ
DATE45657
時刻
データ
TIME34546
日間隔
データ
INTERVAL YEAR TO
DAY
56768
時間隔
データ
INTERVAL HOUR TO
SECOND
45657
時刻印
データ
TIMESTAMP(p)7+(p÷2)8+(p÷2)9+(p÷2)8+(p÷2)10+(p÷2)
(凡例)
a:実際のデータ長
b:実際の文字数
m,n,p:正の整数
×:インデクス定義時にエラーになります。
-:該当しません。
最初は「キー長が255バイト以下」で計算してください。その結果,キー長が256バイト以上になる場合は,「キー長が256バイト以上」で再計算してください。
注※1
構成列が固定長の列だけのインデクスのキー長です。
注※2
構成列に可変長の列を含むインデクスのキー長です。
注※3
全体のけた数がmけたで,小数点以下のけた数がnけたの固定小数点数です。mを省略した場合は15を仮定します。

(3) インデクスの格納ページ数の計算例

(a) 例題1

次に示す在庫表の「品番」をユニークインデクス(重複するキーがない)とする場合のインデクス格納ページ数を求めます。

品番商品名規格単価数量原価
20180掃除機C20200002615000
20190掃除機C772800010523000
20130冷蔵庫P10300007025000
20220テレビK18350001230000
20200掃除機C89350003030000
20140冷蔵庫P23350006030000
20280アンプL103800020033000
20150冷蔵庫P32480005043000
20290アンプL504980026045000
20230テレビK20500001545000
20160冷蔵庫P355580012050000
計算条件
  1. インデクスのキーの総数:10,000件
  2. ユーザ用RDエリアのページ長:8,192バイト
  3. CREATE INDEXで指定する未使用領域の比率:30%
  4. インデクスのデータ型:CHARACTER
  5. インデクスのキー長:5バイト
  6. キーの重複数:1
計算式
[図データ]
(b) 例題2

例題1に示す在庫表の「商品名」をインデクス(重複するキーがある)とする場合のインデクス格納ページ数を求めます。

計算条件
  1. インデクスのキーの総数:10,000件
  2. ユーザ用RDエリアのページ長:8,192バイト
  3. CREATE INDEXで指定する未使用領域の比率:30%
  4. インデクスのデータ型:NCHAR
  5. インデクスのキー長:4文字(漢字)
  6. キー値の重複が201以上のキーの種類の個数
    (このときの平均重複数は250):1
  7. キー値の重複が200以下のキーの種類の個数
    (このときの平均重複数は5):(10000-250)÷5=1950
計算式
[図データ]

次に示す会員表の「性別」と「入会年度」を複数列インデクスとする場合のインデクス格納ページ数を求めます。

会員番号氏名年齢性別入会年度
0001安東洋子18F1983
0002浅井順一25M1967
0003石井公子24F1987
0004石井一郎25M1964










1000渡辺英雄30M1995
計算条件
  1. インデクスのキーの総数:10,000件
  2. ユーザ用RDエリアのページ長:8,192バイト
  3. CREATE INDEXで指定する未使用領域の比率:30%
  4. 1964年度の入会人数:1,000人
  5. ほかの年度の入会人数:200人以下
  6. 入会年度:1965~1995の31年間
  7. 入会する男女の数は,毎年同数とします。
  8. 列のデータ型:次に示します。
    会員番号:CHARACTER(5)
    氏名:NCHAR(4)
    年齢:INTEGER
    性別:CHARACTER(4)
    入会年度:INTEGER
計算式
  1. 1965年度以降の31年間に入会した人(男,女含めて200人以下)のキーの種類の個数(c)は,c=31×2=62となります。
  2. 重複数の平均値(d)は,d=(10000-1000)÷62=146となります。
  3. 1964年の1年間に入会した人(男,女含めて1000人)のキーの種類の個数(e)は,e=2となります。
  4. 重複数の平均値(f)は,f=1000÷2=500となります。
  5. 性別と入会年度のDB格納キー長(g)は,
    g=↑(4+1+5)÷4↑×4=12となります。

    [図データ]