16.4.1 最適化情報パラメタファイルに記述する項目

最適化情報パラメタファイルに記述する項目の一覧を次の表に示します。また,最適化情報パラメタファイルに記述する項目の内容を表16-7に示します。

表16-6 最適化情報パラメタファイルに記述する項目の一覧

分類項目名内容
表最適化情報NROWS表の行数
NPAGES表のデータページ数
インデクス最適化情報INDEXインデクス名
NIPAGESインデクスページ数
NLEVELインデクスの段数
SEQ_RATIOインデクスのシーケンシャル度
NENTRYインデクスのキー値数
列最適化情報COLUMN列名
NUNIQUE列のユニーク値数
NNULLS列のナル値数
N_MAX_DUP_KEY列の最大重複列値の数
N_MIN_DUP_KEY列の最小重複列値の数
MAX_VALUE列値の最大値
MIN_VALUE列値の最小値

表16-7 最適化情報パラメタファイルに記述する項目の内容

項目名内容
NROWS表の行数を指定します。
表の行数は,次のSQL文で求められます。

SELECT COUNT(*) FROM 表名

NPAGES表の使用中データページ数を指定します。
データベース状態解析ユティリティを実行するか,又はマニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
INDEXインデクス名を指定します。
指定するインデクスは,-tオプションで指定した表に定義されている必要があります。
なお,指定できるインデクスはB-treeインデクスだけであり,プラグインインデクスは指定できません。
NIPAGESインデクスの使用中インデクスページ数を指定します。
データベース状態解析ユティリティを実行するか,又はマニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
NLEVELインデクスの段数を指定します。
マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。また,クラスタキーの場合は,データベース状態解析ユティリティで求められます。
SEQ_RATIOインデクスのシーケンシャル度を指定します。
0~100の値を指定します。インデクスのキー順にデータが格納されている場合は100,ランダムにデータが格納されている場合は0を指定してください。この値を大きくすると,よりインデクスを使用することになります。
NENTRYインデクスのキー値数を指定します。
  • ユニークインデクスの場合は,表の行数を指定してください。
  • ユニークインデクスでない場合は,重複排除したインデクスのキー値数を指定してください。
インデクスのキー値数は,次のSQL文で求められます。
<単一列インデクスの場合>

 SELECT COUNT(DISTINCT インデクス構成列名※1) FROM 表名

<複数列インデクスの場合>

 WITH W1(WC1,WC2,…) AS (SELECT DISTINCT
   インデクス構成列名1※1,インデクス構成列名2※1,…
   FROM 表名) SELECT COUNT(*) FROM W1

COLUMN列名を指定します。
指定する列は,-tオプションで指定した表になければなりません。ただし,LOB列,抽象データ型列は指定できません。
NUNIQUE列のユニーク値数を指定します。
列のユニーク値数は,次のSQL文で求められます。

 SELECT COUNT(DISTINCT 列名※2) FROM 表名

NNULLS列のナル値数を指定します。
列のナル値数は,次のSQL文で求められます。
  • 列の定義長※3が32,000バイト以下の場合

 SELECT COUNT(*) FROM 表名 WHERE 列名 IS NULL

  • 列の定義長※3が32,001バイト以上の場合

 WITH W1(WSUBCLM) AS (SELECT SUBSTR(列名,1,255※4)) FROM 表名)
 SELECT COUNT(*) FROM W1 WHERE WSUBCLM IS NULL

N_MAX_DUP_KEY最も重複が多い列値の重複数を指定します。
最も重複が多い列値の重複数は,次のSQL文で求められます。
  • 列名で指定する列の定義長※3が255バイト以下の場合

 WITH W1(WCOUNT) AS (SELECT COUNT(列名) FROM 表名
   WHERE 列名 IS NOT NULL GROUP BY 列名)
   SELECT MAX(WCOUNT) FROM W1

  • 列名で指定する列の定義長※3が256バイト以上,32,000バイト以下の場合

 SELECT COUNT(SUBSTR(列名,1,255※4)) FROM 表名
   WHERE 列名 IS NOT NULL GROUP BY SUBSTR(列名,1,255※4)
   ORDER BY 1 DESC LIMIT 1

  • 列名で指定する列の定義長※3が32,001バイト以上の場合

 WITH W1(WSUBCLM) AS (SELECT SUBSTR(列名,1,255※4)) FROM 表名)
   SELECT COUNT(WSUBCLM) FROM W1 WHERE WSUBCLM IS NOT NULL
   GROUP BY WSUBCLM ORDER BY 1 DESC LIMIT 1

N_MIN_DUP_KEY最も重複が少ない列値の重複数を指定します。
最も重複が少ない列値の重複数は,次のSQL文で求められます。
  • 列名で指定する列の定義長※2が255バイト以下の場合

 WITH W1(WCOUNT) AS (SELECT COUNT(列名) FROM 表名
   WHERE 列名 IS NOT NULL GROUP BY 列名)
   SELECT MIN(WCOUNT) FROM W1

  • 列名で指定する列の定義長※3が256バイト以上,32,000バイト以下の場合

 SELECT COUNT(SUBSTR(列名,1,255※4)) FROM 表名
   WHERE 列名 IS NOT NULL GROUP BY SUBSTR(列名,1,255※4)
   ORDER BY 1 ASC LIMIT 1

  • 列名で指定する列の定義長※3が32,001バイト以上の場合

 WITH W1(WSUBCLM) AS (SELECT SUBSTR(列名,1,255※4)) FROM 表名)
   SELECT COUNT(WSUBCLM) FROM W1 WHERE WSUBCLM IS NOT NULL
   GROUP BY WSUBCLM ORDER BY 1 ASC LIMIT 1

MAX_VALUE※5列値の最大値を指定します。
列値の最大値は,次のSQL文で求められます。

 SELECT MAX(列名※6) FROM 表名

MIN_VALUE※5列値の最小値を指定します。
列値の最小値は,次のSQL文で求められます。

 SELECT MIN(列名※6) FROM 表名

注※1
インデクス構成列名に指定する列の定義長が256バイト以上の場合は,「インデクス構成列名」を「SUBSTR(インデクス構成列名,1,255※4)」に置き換えます。
注※2
列名で指定する列の定義長が256バイト以上の場合は,「列名」を「SUBSTR(列名,1,255※4)」に置き換えます。
注※3
定義長の単位はバイトです。各国文字列データ型の場合は,定義長×2となります。
注※4
列のデータ型が文字データ型,及びBINARY型の場合は255となります。各国文字列データ型,及び混在文字列データ型の場合は127となります。
注※5
MAX_VALUEは,ディクショナリ表SQL_COLUMN_STATISTICSのRANGE_VALUES列の32バイト目に格納されます。
MIN_VALUEは,ディクショナリ表SQL_COLUMN_STATISTICSのRANGE_VALUES列の48バイト目に格納されます。ただし,列名で指定する列のデータ型がDECIMAL型,又はNUMERIC型で,精度が32けた以上の場合は,列の定義長※3に32バイトを足した位置に格納されます。
注※6
列の定義長が256バイト以上の場合は,次のように置き換えてください。
  • 列のデータ型がCHAR,及びBINARYのときは,「列名」を「SUBSTR(列名,1,255)」に置き換えます。
  • 列のデータ型がNCHAR,及びMCHARのときは,「列名」を「SUBSTR(列名,1,127)」に置き換えます。
  • 列のデータ型がVARCHAR,NVARCHAR,及びMVARCHARのときは,「列名」を次の指定に置き換えます。

 「CASE LENGTH(列名) WHEN  0 THEN ‘’
    WHEN  1 THEN SUBSTR(列名,1,1)  WHEN  2 THEN SUBSTR(列名,1,2)
    WHEN  3 THEN SUBSTR(列名,1,3)  WHEN  4 THEN SUBSTR(列名,1,4)
    WHEN  5 THEN SUBSTR(列名,1,5)  WHEN  6 THEN SUBSTR(列名,1,6)
    WHEN  7 THEN SUBSTR(列名,1,7)  WHEN  8 THEN SUBSTR(列名,1,8)
    WHEN  9 THEN SUBSTR(列名,1,9)  WHEN 10 THEN SUBSTR(列名,1,10)
    WHEN 11 THEN SUBSTR(列名,1,11)  WHEN 12 THEN SUBSTR(列名,1,12)
    WHEN 13 THEN SUBSTR(列名,1,13) ELSE SUBSTR(列名,1,14) END 」