CREATE INDEX ステートメント

CREATE INDEX ステートメントは、パーティション索引または副次索引、および索引スペースを現行サーバーに作成します。 索引のキーに含まれる列は、現行サーバーにある表の列です。

呼びかけ CREATE INDEX

このステートメントは、アプリケーション・プログラムに組み込むか、あるいは対話式に発行することができます。 これは、DYNAMICRULES RUN動作が有効になっている場合にのみ、動的に準備できる実行可能なステートメントです。 詳細は、「Authorization IDs and dynamic SQL」 を参照してください。

承認 CREATE INDEX

以下に定義する特権セットには、少なくとも次のいずれかが含まれていなければいけません。

  • 表に対する INDEX 特権
  • 表の所有権
  • 表を含むデータベースに対する DBADM 権限
  • システム DBADM
  • SYSADM または SYSCTRL 権限
  • 変更の開始インストール SYSOPR 権限 (プロセスの現行 SQLID が SYSINSTL に設定されている場合)変更の終わり

インデックス名が暗黙的に修飾されている場合、またはroleがインデックスの所有者である場合、権限セットには以下のいずれかが含まれていなければなりません:

  • スキーマのCREATEIN権限
  • システム DBADM
  • SYSADM または SYSCTRL 権限

データベースが暗黙的に作成される場合、データベース特権は暗黙的なデータベースまたは DSNDB04 上になければなりません。

式を使用して索引を作成すると、索引式で呼び出されるすべてのユーザー定義関数上で EXECUTE 特権が必要となります。

上記以外の特権が必要になることもあります。この点については、BUFFERPOOL 文節および USING STOGROUP 文節のところで説明します。

変更の開始

特権セット:

アプリケーション・プログラムにこの ステートメントを組み込む場合、特権セットは、パッケージの所有者が持つ特権となります。 ROLE AS OBJECT OWNER節が指定された信頼されたコンテキストでアプリケーションがバインドされている場合、ロールはインデックスの所有者であり、特権セットはそのロールが保持する特権です。

このステートメントが動的に準備される場合、特権セットは、 プロセスの SQL 許可 ID が持つ特権となります。 プロセスが信頼されたコンテキスト内にあり、ROLE AS OBJECT OWNER句が指定されている場合、特権セットはプロセスの主認証IDに関連付けられたロールが保持する特権のセットであり、インデックスの所有者はそのロールです。

ROLE AS OBJECT OWNERが有効でなく、インデックスが明示的に修飾されている場合、明示的な修飾子はインデックスの所有者であり、権限セットは以下のいずれかを含んでいなければなりません:

  • データベースの DBADM または DBCTRL 権限
  • システム DBADM 権限
  • SYSCTRL 権限
  • SYSADM 権限
変更の終わり

構文 CREATE INDEX

構文図を読むビジュアルシンタックスダイアグラムをスキップするCREATEUNIQUEWHERE NOT NULLINDEXindex-nameONtable-name(,カラム名key-expressionASCDESCRANDOM,BUSINESS_TIMEWITHOUT OVERLAPSWITH OVERLAPS)aux-table-nameother-options

other-options:

構文図を読むビジュアルシンタックスダイアグラムをスキップするxml-index-specificationINCLUDE(,カラム名)NOT CLUSTERCLUSTERPARTITIONEDNOT PADDEDPADDED2しようしようしょ自由仕様gbpcache仕様DEFINE YESDEFINE NOCOMPRESS NOCOMPRESS YESINCLUDE NULL KEYSEXCLUDE NULL KEYSPARTITION BYRANGE(,PARTITION整数1しようしようしょ自由仕様gbpcache仕様DSSIZE整数G)BUFFERPOOLbpnameCLOSE YESCLOSE NODEFER NODEFER YESDSSIZE整数GPIECESIZE整数KMGCOPY NOCOPY YES
注:
  • 1 同一の条項は、複数回指定してはならない。
  • 2 デフォルトのフィールドの値(インストールパネルDSNTIPE上の「PAD INDEXES BY DEFAULT」)がデフォルト値を決定します。 値が NO の場合は、NOT PADDED がデフォルトです。 値が YES の場合は、PADDED がデフォルトです。 詳しくは、PADDED オプションまたは NOT PADDED オプションの説明を参照してください。

xml-index-specification

構文図を読むビジュアルシンタックスダイアグラムをスキップするGENERATE KEY USINGGENERATE KEYS USINGXMLPATTERNXMLパターン句ASsql-data-type

XMLパターン句

構文図を読むビジュアルシンタックスダイアグラムをスキップするプロローグpattern-expression

プロローグ

構文図を読むビジュアルシンタックスダイアグラムをスキップするdeclare namespaceNCName=StringLiteral;declare default element namespaceStringLiteral;

pattern-expression

構文図を読むビジュアルシンタックスダイアグラムをスキップする///forward-axiselement-name*nsprefix:**: NCName.///@ attribute-nameattribute:: attribute-name@ *attribute:: *forward-axistext( )function-step1
注:
  • 1 パターン式は空文字列にすることはできません。

forward-axis

構文図を読むビジュアルシンタックスダイアグラムをスキップするchild::descendant::self::descendant-or-self::

function-step

構文図を読むビジュアルシンタックスダイアグラムをスキップするfn::upper-case(.)fn::exists(element-name*nsprefix:**: NCNamechild:: element-namechild::*child:: nsprefix:*child::*: NCName@ attribute-nameattribute:: attribute-name@ *attribute:: *)

sql-data-type

構文図を読むビジュアルシンタックスダイアグラムをスキップするSQL VARCHAR(整数)DECFLOAT(34)DATETIMESTAMP(12)

しようしようしょ

構文図を読むビジュアルシンタックスダイアグラムをスキップするUSINGVCATcatalog-nameSTOGROUPstogroup-name1PRIQTY -1PRIQTY整数SECQTY -1SECQTY整数ERASE NOERASE YES
注:
  • 1 同一の条項は、複数回指定してはならない。

自由仕様

構文図を読むビジュアルシンタックスダイアグラムをスキップするFREEPAGE 0FREEPAGE整数PCTFREE 10PCTFREE整数1
注:
  • 1 同一の条項は、複数回指定してはならない。

gbpcache仕様

構文図を読むビジュアルシンタックスダイアグラムをスキップするGBPCACHE CHANGEDGBPCACHE ALLNONE

説明の対象: CREATE INDEX

UNIQUE
表が、同じ値の索引キーのある行を複数含まないようにします。 UNIQUE を使用する場合、列のすべての NULL 値は等しいものと見なされます。 例えば、キーが NULL 値を格納できる単一列である場合、その列には NULL 値を 1 つ のみ格納できます。 表の行が更新されるか、新規行が挿入された場合、制約が強制されます。

CREATE INDEX ステートメントの実行中に、制約も検査されます。 重複するキー値を含む行が既に表に含まれている場合、索引は作成されません。

UNIQUE WHERE NOT NULL
表が、同じ値の索引キーのある行を複数含まないようにします (列のすべての NULL 値は等しいと見なされません)。 複数の NULL 値が許可されます。 それ以外は、これと同一です。 UNIQUE
INDEX インデックス名
索引の名前を指定します。 この名前は、現行サーバーに存在する索引、SYSIBM.SYSPENDINGOBJECTS カタログ表にリストされている索引、またはアクセラレーター専用表に存在する索引を示すものであってはなりません。

関連する索引スペースにも名前が付きます。 この名前は、索引用に定義されるデータ・セット名の修飾子として現れます。 ユーザーがデータ・セットを管理する場合、この名前は index-name の 2 番目 (または唯一) の部分と同じです。 この ID が 8 文字を超える場合には、初めの 8 文字だけが使われます。 索引スペースの名前は、指定する表のデータベースの索引スペースと 表スペースの名前の中で、固有のものでなければなりません。 データセットが Db2 によって定義されている場合、 Db2 は固有の名前を生成します。

その索引が宣言済み一時表上にある索引である場合、修飾子 (明示的に指定される場合) は、SESSION でなければなりません。 インデックス名が修飾されていない場合、 Db2 はSESSIONを暗黙的な修飾子として使用します。

詳細は、「インデックス名とガイドライン 」を参照してください。

ON テーブル名または auxテーブル名
索引を作成する対象の表を指定します。 基本表、マテリアライズ照会表、宣言済み一時表、または補助表を示す名前を指定できます。
テーブル名
索引を作成する対象の基本表、マテリアライズ照会表、または宣言済み一時表を指定します。 この名前は、現行サーバーに存在する表を示すものでなければなりません。 (宣言済み一時表の名前には、SESSION という修飾子が付いていなければなりません。)

この名前に、クローン表を指定してはなりません。 この名前には、作成済みの一時表、または XML 列に対して暗黙的に作成された表を指定しないでください。 作成対象の索引が XML 値に対するものである場合、その表には XML を含むことができます。そうでない場合、その表には XML 列を含めないでください。 索引が式を使用して作成されている場合、この名前には、カタログ表または宣言済み一時表を指定することはできません。 変更の開始この名前は、アクセラレーター専用テーブルやディレクトリ・テーブルを識別するものであってはならない。変更の終わり

表が行アクセス制御または列アクセス制御を実施している場合、キー生成中に行の許可と列のマスクは適用されません。

column-name,…
索引キーの列を指定します。

column-name には、この表の列を指定する必要があります。 65 列以上の列を指定しないでください。また、同一列を複数回指定しないでください。 column-name は修飾しないでください。

以下のように定義されている column-name の列は指定しないでください。

  • LOB 列 (または LOB データ・タイプに基づく特殊タイプの列)
  • BINARY 列または VARBINARY 列 (あるいは BINARY データ・タイプまたは VARBINARY データ・タイプに基づく特殊タイプの列、PARTITION BY RANGE 文節も指定されている場合)
  • VARBINARY 列 (または VARBINARY データ・タイプに基づく特殊タイプの列、PADDED 文節も指定されている場合)
  • 変更の開始行変更タイム・スタンプ列 (PARTITION BY RANGE または PARTITIONED 文節も指定されている場合) 変更の終わり
  • タイム・ゾーン列を持つタイム・スタンプ (またはタイム・ゾーン・データ・タイプを持つタイム・スタンプに基づく特殊タイプの列、PARTITION 文節または PARTITION BY RANGE 文節も指定されている場合)。

XML タイプを持つ列を指定できるのは、XMLPATTERN 文節も指定されている場合に限定されます。 XMLPATTERN 文節が指定されている場合、1 列のみ指定可能であり、その列は XML タイプにする必要があります。 その結果としての索引は、XML 索引です。

変更の開始表が Unicode 列が入っている EBCDIC 表である場合、索引キーに指定される文字またはグラフィック列は、すべて EBCDIC、またはすべて Unicode でなければなりません。変更の終わり

変更の開始カラムの長さ属性の合計は、以下の制限値を超えてはならない。ここで、 nはヌル値を含むことができるカラムの数、 mは可変長カラムの数、 dはキー内のDECFLOATカラムの数である:
  • 埋め込みを行う非パーティション索引の場合は、2000 - n
  • 非パディング、非パーティションインデックスの場合、 2000 - n - 2 m - 3 d
  • パーティション索引の場合は 255 - n (埋め込みの有無に関係なく)
  • 255 - n - 2m- 3d 非パディング、パーティショニングインデックス用
変更の終わり
キー表現
スカラー値を戻す式を指定します。 列名だけで構成されるのではない、1 つ以上の式を含んだキーを持つ索引は、式ベースの索引 です。 キー式は、GENERATE KEY USING句またはINCLUDE句では指定できません。 key-expression には次の制限があります。
  • key-expression には、少なくとも 1 つの、table-name の列への参照を含む必要があります。

    table-name の列への参照すべては、非修飾にする必要があります。 参照される列には、FIELDPROC または SECURITY LABEL を含めることはできません。 参照された列は暗黙的に隠す(つまり、IMPLICITLY HIDDEN属性で定義する)ことはできません。

  • key-expression には、以下を含めないでください。
    • 副照会
    • 集約関数
    • 非 deterministic 関数
    • 外部アクションを指定する関数
    • ユーザー定義関数
    • VERIFY_GROUP_FOR_USER 関数または VERIFY_ROLE_FOR_USER 関数
    • シーケンス参照
    • ホスト変数
    • パラメーター・マーカー
    • グローバル変数
    • 特殊レジスター
    • 暗黙的なタイム・ゾーンの値が適用される式 (タイム・ゾーン付きタイム・スタンプへのタイム・スタンプのキャストなど)
    • CASE 式
    • OLAP 仕様
  • 変更の開始キー式がキャスト関数を呼び出す場合、特権セットには、別個の型に対して生成されるキャスト関数に対するEXECUTE権限が暗黙的に含まれていなければならない。変更の終わり
  • 変更の開始キー式が LOWERまたはUPPER関数を呼び出す場合、入力文字列式は FOR BIT DATAであってはならず、関数の呼び出しにはロケール名の引数が含まれていなければならない。変更の終わり
  • 変更の開始key-expressionが TRANSLATE関数を呼び出す場合、その関数は to-string 引数を含んでいなければならない。変更の終わり
  • 変更の開始キー式は、その関数がSUBSTRまたはJSON_VALでない限り、LOB列を参照する引数で組み込み関数を呼び出してはならない。変更の終わり
  • 変更の開始キー式が SUBSTR関数を呼び出す場合、LOB列を参照する関数の引数は、LOB列のインライン部分のみを参照することができます。変更の終わり
  • 変更の開始key-expressionが JSON_VAL関数を呼び出し、最初の引数がLOBカラムの場合、そのカラムはインラインLOBとして定義されなければならない。変更の終わり
  • 変更の開始キー式が JSON_VAL関数を呼び出す場合、その関数の呼び出しは以下の条件を満たしていなければならない:
    • JSON_VAL 関数の呼び出しは、key-expression の最外部の式でなければなりません。
    • 最初の引数が列の場合、その列は増加対応パーティション表スペースの表に含まれている必要があります。
    • 最初の引数に JSON 配列が含まれていないことを示すために、3 番目の引数はストリング ':na' で終了する必要があります。
    変更の終わり
  • 変更の開始キー式が JSON_VAL組み込み関数を呼び出す場合、CREATE INDEX文は、JSON_VAL関数の引数であるLOB列以外のLOB列を参照してはなりません。 このような CREATE INDEX ステートメントは、単一の LOB 列のみを参照できます。変更の終わり
  • 同一索引の中で複数回、同じ式を使用できません。
  • 式の結果のデータ・タイプは LOB、XML、DECFLOAT、または配列値にすることはできません。 ただし、中間結果のデータ・タイプは、LOB 値または DECFLOAT 値 (またはいずれかのデータ・タイプに基づく特殊タイプ) にすることはできますが、XML 値にすることはできません。 DECFLOAT 中間結果の索引の場合、索引の作成時に有効になっていた丸めモードは、索引の使用時にも有効になっている必要があります。
  • EBCDIC 表の Unicode 列が key-expression で参照されている場合、索引キーのコード化スキームはすべて Unicode またはすべて EBCDIC のどちらかでなければなりません。 それ以外の場合、key-expression の結果のコード化スキームは、表と同じコード化スキームにする必要があります。

UTF-8 への変換後、各 key-expression のテキスト・ストリングの最大長は 4000 バイトです。 拡張インデックス内の key-expression の最大数は 64 です。

ASC
索引エントリーを列の昇順で並べます。 ASC は、GENERATE KEY USING 文節と一緒に指定できません。

ASC がデフォルトです。

DESC
索引エントリーを列の降順で並べます。 DESC は、GENERATE KEY USING 文節と一緒に指定できません。あるいは、ON 文節に key-expression が含まれる場合、DESC は指定できません。
RANDOM
索引エントリーを列のランダム順で並べます。 RANDOM は、以下のケースでは指定できません。
  • 可変長列は、索引キーの一部で、索引は NOT PADDED オプションを指定して定義されます。
  • 変更の開始索引キーの列が TIMESTAMP WITH TIME ZONE または DECFLOAT として定義されている変更の終わり
  • 索引が、XML 索引。 XML 索引は、GENERATE KEY USING 文節と一緒に定義されます。
  • 索引は、パーティション・キーの一部です。
  • この索引は、式ベースの索引です。
BUSINESS_TIME
BUSINESS_TIME 期間の列が索引キーの終わりに以下の順序で自動的に追加されることを指定します。
  • BUSINESS_TIME 期間の終了列 (昇順)
  • 昇順での BUSINESS_TIME 期間の開始列

BUSINESS_TIME は、リストの最後の項目として指定できます。 このリストには、少なくとも 1 つの column-name または key-expression が含まれている必要があります。 BUSINESS_TIME が指定されている場合、BUSINESS_TIME 期間の列を column-name または key-expression として、あるいはパーティション・キーの列として指定してはなりません。

変更の開始
WITH または WITHOUT OVERLAPS
期間がオーバーラップしている行の索引キーの期間以外の列または式に、同じ値を持つ複数の行が存在できるかどうかを示します。
変更の開始
WITH OVERLAPS

期間がオーバーラップしている行の索引キーの期間以外の列または式に、同じ値を持つ複数の行が存在できることを示します。 BUSINESS_TIME WITH OVERLAPS 文節は、テンポラル参照制約の外部キーの索引を定義するために使用します。

索引定義に対して UNIQUE が指定されている場合、BUSINESS_TIME WITH OVERLAPS を指定してはなりません。

BUSINESS_TIME 期間の列を含むパーティション・キーで表が定義されている場合、BUSINESS_TIME WITHOUT OVERLAPS を指定してはなりません。

変更の終わり
WITHOUT OVERLAPS

行の索引キーの期間以外の列と式の値が、その行の BUSINESS_TIME 期間で表される時間の点で固有でなければならないことを示します。 Db2 インデックスの列または式に対して、重複する時間期間で同じキー値を持つ複数の行が存在しないことを強制します。 BUSINESS_TIME WITHOUT OVERLAPS 文節は、主キーまたはユニーク制約を強制するユニーク索引の定義に使用します。

BUSINESS_TIME WITHOUT OVERLAPS は、UNIQUE として定義されている索引に対してのみ指定できます。

変更の終わり
補助テーブル名
索引を作成する対象の補助表を指定します。 この名前は、現行サーバーに存在する補助表を示すものでなければなりません。 補助表に既に索引がある場合は、別の索引を作成しないでください。 補助表は索引を 1 つしか持てません。

索引キーには列を指定しないでください。 キー値は、システム生成の 固有の 19 バイトの値として暗黙的に定義されています。

修飾する場合、table-name または aux-table-name は 2 部構成の名前 または 3 部構成の名前にすることができます。 3つの部分からなる名前を使用する場合は、最初の部分は現在のサーバーのインストールパネルDSNTIPRのフィールド Db2 LOCATION NAMEの値と一致する必要があります。 (現在のサーバーがローカルの Db2 でない場合、この名前は必ずしもCURRENT SERVER特殊レジスタ内の名前であるとは限りません。) 2 部構成の名前でも、3 部構成の名前でも、その名前を修飾する 許可 ID が索引の所有者となります。

指定されたテーブルを含むテーブルスペースが Db2 に利用可能でなければなりません。そうすれば、そのデータセットを開くことができます。 テーブルスペースがEA対応の場合、インデックスのデータセットは、拡張フォーマットとアドレス指定属性を持つ DFSMS データクラスに属するよう定義する必要があります。

GENERATE KEY USING
XMLPATTERN と共に、GENERATE KEY USING が XML 索引の生成に必要となります。
XMLPATTERN
XML 列が索引化されている場合、その文書の一部のみ索引化されます。 これらの部分を指定するには、XMLPATTERN 文節に続くパス式を指定します。 指定されたパターンと一致する、これらのエレメント、属性、テキスト・ノードの値のみ索引化されます。 XML パターンは、オプションの名前空間宣言 (この宣言では、名前空間の接頭部が名前空間 URI にマップされる) を使用して、パス式を提供することにより、指定可能です。 このパス式は、XQuery 内のパス式と同じです。ただし例外は、XML 索引に対して指定されるパスが子軸、自己または子孫軸、ワイルドカード式、または属性のみをサポート可能であることです。 UTF-8 への変換後の XML パターン・テキストの最大長は 4000 バイトです。 XQueryの詳細については、 pureXML の概要をご覧ください。
プロローグ
pattern-expression で修飾された名前を使用するには、名前空間の接頭部を宣言する必要があります。 デフォルトの名前空間も、非修飾名指定で使用するために定義できます。
名前空間を宣言する NCName=StringLiteral
名前空間の接頭部 (NCName) が、名前空間 URI (StringLiteral で指定) にマップされます。 複数の名前空間を宣言できますが、各名前空間の接頭部は名前空間宣言のリスト内でユニークにする必要があります。 NCName は、XML 1.0 標準に定義されているような XML 名前です。 NCName にはコロン文字を含めることはできません。 名前空間 URI は、http://www.w3.org/XML/1998/namespace または http://w3.org/2000/xmlns/ にすることはできません。
デフォルト・エレメントの名前空間 StringLiteral の宣言
エレメントの非修飾名とタイプに対して、デフォルトの名前空間 URI を指定します。 StringLiteral が名前空間 URI です。 デフォルト・エレメントの名前空間を宣言しない場合、エレメントの非修飾名とタイプは名前空間内にはありません。 デフォルトの名前空間は 1 つしか宣言できません。
パターン表現
Pattern-expression を使用して、索引化されるそれらのノードを XML 文書内で指定します。 パターン式は空文字列または無効な文字列にすることはできず、 XQuery 式は50レベル以上ネストすることはできません。 pattern-expressionXQuery 更新式であることはできません。
/ (スラッシュ )
パス式のステップを分離します。
// (二重の前方向スラッシュ)
/descendant-or-self::node()/ に対する省略構文
. (ドット)
/self::node()/ に対する省略構文
child::
コンテキスト・ノードの子を指定します。 child:: は、前方軸が無指定の場合は、デフォルトです。
descendant::
コンテキスト・ノードの子孫を指定します。
self::
現行コンテキスト・ノードを指定します。
descendant-or-self::
コンテキスト・ノードとそのコンテキスト・ノードの子孫を指定します。
element-name
XML 文書内のエレメントを指定します。 element-name は XML QName であり、以下のいずれかの形式にすることができます。
nsprefix :NCName
nsprefix は、宣言する必要のある名前空間の接頭部を明示的に指定します。
NC名
デフォルト・ネーム・スペースを使用する非修飾 XML 名。
* (アスタリスク)
任意のエレメント名を示します。 * の前に attribute:: または @ が付いていると、* は任意の属性名を示します。
nsprefix: *
指定された名前空間内の任意の NCName を示します。
* :NCName
現在宣言されているすべての名前空間内における固有の XML 名を示します。
属性 ::または@
コンテキスト・ノードの属性を指定します。
attribute-name
XML 文書内の属性を指定します。 attribute-name は XML QName であり、以下のいずれかの形式にすることができます。
nsprefix :NCName
nsprefix は、宣言する必要のある名前空間の接頭部を明示的に指定します。
NC名
デフォルト・ネーム・スペースを使用する非修飾 XML 名。
テキスト( )
あらゆるテキスト・ノードに一致します。
fn:upper-case(.)
コンテキスト・ステップ (fn:upper-case に先立って指定されている pattern-expression の部分) によって指定される各ノードの索引のキー値を識別するエレメント・ノードまたは属性ノードを指定します。

fn:upper-case() のコンテキスト・ステップでは、 エレメント・ノードまたは属性ノードを指定する必要があります。 fn:upper-case() の引数は、セルフ・ステップである必要があります。 XML 値索引のキー値は、SQL データ・タイプ VARCHAR として指定する必要があります。 VARCHAR値の長さは、 Db2 で許可されている任意の値にすることができます。

fn:exists()
コンテキスト・ステップ (fn:exists に先立って指定されている pattern-expression の部分) によって指定される各ノードの索引のキー値を識別するエレメント・ノードを指定します。

fn:exists() のコンテキスト・ステップでは、 エレメント・ノードを指定する必要があります。 fn:exists() の引数は、子エレメント・ノードの単一ステップであるか、属性ノードであるかのいずれかである必要があります。 名前テスト部分は、ネーム・スペース接頭部または NCName のいずれかに対応するワイルドカード文字にすることができます。 fn:exists() で終わる XPath 式の XML 値索引のキー値は、SQL データ・タイプ VARCHAR(1) として指定する必要があります。 キー値は「T」または「F」になります。 「T」は fn:exists() が真に評価されたことを意味し、「F」は fn:exists() が偽に評価されたことを意味します。

AS SQL データ型
索引化された値は、指定された SQL データ・タイプのインスタンスとして格納されます。 指定されたデータ・タイプをキャストすると、その値の精度が損なわれることになります。 例えば、精度が損なわれることが発生する可能性があるのは、XML 整数値が SQL データ・タイプ DECFLOAT にキャストされる場合です。 このキャストにより精度が損なわれることが発生すると、その結果は、その値が索引に格納される時点で概算値に丸められることになります。 このキャスト結果は、SQL データ・タイプでサポートされた範囲外になることはできません。 指定されたデータ・タイプにこの値をキャストできない場合、その文書は依然として表に挿入されますが、その値に対する索引エントリーは作成されません。 エラー・コードまたは警告コードは何も戻されません。
この索引がユニークな場合、指定されたタイプに値がキャストされた後では、その値に対してユニークであることが強制されます。 SQLデータ型へのキャスト時に丸めが発生する可能性があるため、値がテーブルにすでに存在するドキュメントと同じキー値にキャストされる場合、 Db2 は挿入時に重複キーエラーを返すか、インデックスの作成に失敗します。
VARCHAR ( 整数 )
さの整数は、1~1000バイトの範囲の値です。 VARCHAR が長さを使って指定されていると、指定された長さは制約として扱われます。 指定された長さよりも長い値のノードを持つ表に文書を挿入する場合 (または、その文書が索引作成時に表に存在する場合)、その挿入または索引作成は失敗します。
DECFLOAT
DECFLOAT を指定できるのは、索引の数値に対してです。 このキャストが成功するには、そのストリングは有効な XML 数値タイプである必要があります。 そうでない場合は、その値は無視されて、索引に対する挿入は行われません。 キャスト結果は、DECFLOAT で表現可能な範囲外にすることはできません。 数値に対する XML スキーマ・データ・タイプは SQL データ・タイプよりも大きな精度を許容するため、そのキャスト結果は SQL データ・タイプに合わせて丸められる可能性があります。 索引に格納される DECFLOAT 値は、正規化された数値です。
DATE
SQL DATE データ・タイプ値は、索引に格納される前に UTC (協定世界時) に正規化されます。 無効な xs:date 値の場合、値は索引に挿入されずに無視されます。 DATE に対して XML スキーマ・データ・タイプを使用すると、SQL データ・タイプより大きい精度を使用できます。 範囲外の値が検出されると、エラーが戻されます。
TIMESTAMP (12)
SQL TIMESTAMP データ・タイプ値は、索引に格納される前に UTC (協定世界時) に正規化されます。 ドキュメントで指定された値がタイムゾーンを指定していない場合、 Db2 は暗黙のタイムゾーンを使用して、値をUTCに正規化します。 無効な xs:dateTime 値の場合、値は索引に挿入されずに無視されます。 タイム・スタンプに対して XML スキーマ・データ・タイプを使用すると、SQL データ・タイプより大きい精度を使用できます。 範囲外の値が検出されると、エラーが戻されます。 12 小数桁の精度のみを SQL TIMESTAMP 索引キーに使用できます。
INCLUDE ( 列名 )
ユニーク索引の索引キー列のセットに追加する追加の列を指定します。 指定された列は INCLUDE 列名は一意性を強制するために使用されません。 組み込まれた列を使用することで、索引のみによるアクセスを使用する一部の照会では、パフォーマンスが向上する場合があります。

INCLUDE を指定する場合には、UNIQUE 文節を指定する必要があります。 INCLUDE 文節に指定した列は、索引に指定されている、列数の制限および列の長さ属性の合計の制限の対象としてカウントされます。 索引の列の総数は 64 を超えてはいけません。

column-name は、固有性の施行に使用される列と異なる必要があり、INCLUDE 文節に指定されている他の列と異なる必要があります。 column-name は非修飾で、指定した表の列を示している必要があり、また索引の既存の列にしないでください。 column-name では LOB 列や DECFLOAT 列 (またはこのいずれかのタイプに基づく特殊タイプ) を指定できません。

INCLUDE 文節は、次のタイプの索引に指定することはできません。

  • 非ユニーク索引
  • 索引制御パーティションを使用する場合は、パーティション索引
  • 補助索引
  • XML 索引
  • 拡張索引
  • 式ベースの索引

文字またはグラフィック・ストリングのデータ・タイプとして定義されている INCLUDE リスト内の列は、文字またはグラフィック・ストリングのデータ・タイプの他のキー列と同じコード化スキームで定義されている必要があります。

CLUSTER または NOT CLUSTER
索引が表のクラスタリング索引であるかどうかを指定します。 この文節は、補助表、またはハッシュ編成を使用するように定義されている表の索引に指定してはなりません。
CLUSTER
索引は表のクラスタリング索引として使用されます。 CLUSTER は XMLPATTERN または key-expression が指定されている場合には指定できません。
NOT CLUSTER
索引は表のクラスタリング索引として使用されません。
PARTITIONED
索引がデータ・パーティション化索引であることを指定します (つまり、基礎のデータのパーティション・スキームに従ってパーティション化されます)。 パーティショニングされたインデックスは、パーティショニング・バイ・レンジのユニバーサル・テーブル・スペース(UTS)内のテーブル、またはレンジ・パーティショニング(UTSではない)テーブル・スペース内のテーブルにのみ作成できます。 パーティショニングインデックスは、パーティショニング・バイ・グロースUTSのテーブルでは作成できません。 XMLPATTERN が指定されている場合は、PARTITIONED を指定することはできません。 パーティション化索引のタイプは、パーティションと副次です。

指定された索引キー列が、パーティション・キーに指定された列と一致するか、その列のスーパーセットであり、かつ昇順または降順の属性が同じである場合、索引はパーティション索引と見なされます。

PARTITIONED を使用する場合、PRIQTY と SECQTY 指定を持った USING 指定は、オプションです。 これらのスペース・パラメーターを指定しない場合は、デフォルト値が使用されます。

副次索引は、パーティション索引の定義に適合しないパーティション化表スペースに対して定義される索引です。 索引の列がパーティション列のスーパーセットである場合に限り、UNIQUE と UNIQUE WHERE NOT NULL が許可されます。 すべての索引列は、table-name(column-name) 文節で指定される必要があり、INCLUDE 文節で指定されてはなりません。 パーティション化副次索引が、索引制御パーティションを使用する表に対して作成された場合、その表は表制御パーティションを使用するように変換されます。

NOT PADDED または PADDED

可変長ストリング列を索引に格納する方法を指定します。 索引に可変長列がない場合、このオプションは無視され、警告メッセージが戻されます。 可変長ストリング列のない索引は、常に物理的に埋め込まれた索引として作成されます。

変更の開始パッデッドインデックスは、特定の状況においてデータへのインデックスのみによるアクセスを妨げる可能性があります。 詳細については、 「パディングあり/なしのインデックス」 を参照してください。変更の終わり

NOT PADDED
可変長ストリング列を索引の最大長まで埋め込まないように指定します。 可変長列の長さ情報がキーとともに格納されます。

索引が補助表に対して作成される場合、NOT PADDED は無視され、効果はありません。 補助表に対する索引は必ず埋め込まれます。

PADDED
デフォルトの埋め込み文字を使用して、索引の中にある可変長ストリング列を最大長まで常に埋め込むように指定します。 XMLPATTERN が指定されている場合には PADDED を指定できません。 PADDED は、VARBINARY 列上に定義された索引に対しては、指定できません。

インデックスに少なくとも1つの可変長カラムが含まれる場合、PADDEDまたはNOT PADDEDオプションのデフォルト値は、PADIXサブシステムパラメータの値によって決まります。 詳細については、 PAD INDEXES BY DEFAULT フィールド(PADIX サブシステムパラメータ) を参照してください。

  • このフィールドの値が NO の場合、PADDED を指定しない限り新規索引の埋め込みは行われません。
  • このフィールドの値が YES の場合、NOT PADDED が指定されている場合を除き、新規索引の埋め込みは行われます。
USING (非パーティション索引の場合)
非分割インデックスの場合、USING句は、インデックスのデータセットがユーザによって管理されるか、 Db2 によって管理されるかを示します。 Db2 定義が指定されている場合、この節では、スペース割り当てパラメータ(PRIQTYとSECQTY)と消去ルール(ERASE)も指定します。

USING を省略すると、データ・セットDb2は、表に関連付けられているデータベースのデフォルト・ストレージ・グループにリストされているボリューム上で管理します。 データベースのデフォルトのストレージグループが存在していなければなりません。 USING 文節を指定しないと、PRIQTY、SECQTY、および ERASE は、 そのデフォルト値となります。

VCATカタログ名
索引用の最初のデータ・セットをユーザーが管理し、2 つ目以降 のデータ・セットが必要になれば、それらもユーザーが管理すること を指定します。

データ・セットは、カタログ名が識別する統合カタログ機能カタログにカタログされた VSAM 線形データ・セットです。 カタログ名値の詳細については、「SQLにおける命名規則 」を参照してください。

Db2 サブシステムを複数使用して、現在のサーバーと統合カタログ機能のカタログを共有することができます。 これらのサブシステムが同じ名前を異なるデータ・セットに割り当てようとする可能性を回避するには、他の Db2 サブシステムによって使用されていない カタログ名 値を指定してください。

以下のいずれかの状況では、VCAT を指定しないでください。

  • 宣言済み一時表の索引。
  • テーブルスペースが成長によるパーティショニングであり、テーブルスペースが Db2 カタログの一部ではない場合。
STOGROUP stogroup-name
Db2 がインデックス用のデータセットを定義し、管理することを指定します。 各データ・セットは、指定したストレージ・グループ内にリストされている ボリューム上に定義されます。 データ・セットに対する 1 次割り振りおよび 2 次割り振りは、PRIQTY と SECQTY に 指定した値 (またはデフォルト) によって決まります。 PRIQTY+118×SECQTY が2ギガバイト以上の場合、複数のデータセットが最終的に使用される可能性もありますが、この文の実行時には最初のデータセットのみが定義されます。
変更の開始USING STOGROUP を使用するには、権限セットに以下のいずれかを含める必要があります。ただし、宣言済みグローバル一時テーブルにインデックスを作成する場合で、 stogroup-name が作業ファイルデータベースのデフォルトのストレージグループと一致する場合は除きます:
  • SYSADM 権限
  • SYSCTRL 権限
  • そのストレージグループのUSE権限
変更の終わり

さらに、stogroup-name は、現行サーバーに存在し、 その記述の中にボリューム通し番号を少なくとも 1 つは含んで いるストレージ・グループを示すものでなければなりません。 どのボリュームを選択するのかはストレージ管理サブシステム (SMS) に 任せるといった内容の記述にすることも可能です。 ストレージグループで指定された各ボリュームは、データセットの動的割り当てのために z/OS® からアクセス可能でなければならず、また、これらのボリュームはすべて同じデバイスタイプでなければなりません。

ストレージ・グループに使用される統合カタログ機能カタログには、索引の最初のデータ・セットの項目がが含まれていてはなりません。 カタログがパスワードで保護されている場合は、ストレージ・グループの 記述に有効なパスワードが入っていなければなりません。

ストレージ・グループはデータ・セット名を与えます。 第 1 レベル修飾子は、データ・セットがカタログされる統合カタログ機能カタログの名前または別名でもあります。 データ・セットの命名規則は、ユーザーがデータ・セットを管理する場合と同じです。

PRIQTY 整数
Db2 管理下のデータセットに対する最小のプライマリスペース割り当てを指定します。 integer は正の整数または -1 でなければなりません。 PRIQTY に正の整数値を指定した場合の 1 次スペース割り振りは、少なくとも n キロバイトです。ここで、n は次のとおりです。
12
integer が 0 より大きく、12 より小さい場合。
整数
整数が 12~4194304の範囲内にある場合。
2097152
以下の条件の両方を満足する場合
  • integer が 2097152 より大きい。
  • 索引が、LARGE 属性または DSSIZE 属性を指定して定義されていない表スペース上のパーティション化されていない索引である。
4194304
integer が 4194304 より大きい場合。

PRIQTYを指定しない場合、またはPRIQTYの値として -1 を指定した場合は、 Db2 はプライマリスペース割り当てのデフォルト値を使用します。 Db2 がデフォルト値をどのように決定するかについては、「プライマリおよびセカンダリスペースの割り当てに関するルール」 を参照してください。

PRIQTY を指定し、値 -1 を指定しない場合、Db2は、n 以上の 4KB の最小公倍数を使用してメソッド・サービスにアクセスするための 1 次スペース割り振りを指定します。 割り当てられたスペースは、 Db2 が要求したスペースの量よりも大きくなる可能性があります。 例えば、要求されたスペースを入れられるだけの最小の トラック数となる場合も考えられます。 実際のストレージ容量をより正確に見積もるには、 DEFINE CLUSTER コマンドを参照してください。

PRIQTYの適切な値を決定する際には、プライマリ領域の2ページが、 Db2 によってインデックス項目の保存以外の目的で使用される可能性があることに注意してください。

SECQTY 整数
Db2 管理下のデータセットに対する最小のセカンダリ領域割り当てを指定します。 integer は、正の整数、0、または -1 でなければなりません。 SECQTYを指定しない場合、またはSECQTYの値として -1 を指定した場合は、 Db2 は数式を使用して値を決定します。 値を指定するしないに関わらず、セカンダリスペース割り当てに使用される実際の値については、「プライマリおよびセカンダリスペース割り当てのルール」 を参照してください。

を指定し、 SECQTY、 -1 の値を指定しない場合、 Db2 は、 4KB の最小倍数で整数未満ではない値を使用して、アクセス方法サービスに割り当てる2次スペースを指定します。 割り振られたスペースは、Db2によって要求されたスペースの量より大きくすることができます。 例えば、要求されたスペースを入れられるだけの最小の トラック数となる場合も考えられます。 実際のストレージ容量をより正確に見積もるには、 DEFINE CLUSTER コマンドを参照してください。

ERASE
ユーティリティの実行中またはインデックスを削除するSQLステートメントの実行中に削除された場合、 Db2 管理下のデータセットを削除するかどうかを示します。
いいえ
データ・セットを消去しません。 データ・セットの削除を伴う操作では、ERASE YES よりもパフォーマンスが上がります。 ただし、Db2を使用しない場合でも、データは引き続きアクセス可能です。 これはデフォルトです。
はい
データ・セットを消去します。 セキュリティー手段として、Db2は、データ・セット内のすべてのデータを削除する前にゼロで上書きします。
自由仕様
FREEPAGE 整数
Db2 ユーティリティを実行した結果としてインデックス項目が作成された場合、または既存の行を持つテーブルのインデックスを作成する場合に、ページの空き領域をどの程度残すかを指定します。 integer ページごとに、フリー・ページが 1 ページ残されます。 整数値の範囲は0~255です。 デフォルトは 0 です。フリー・ページは残されません。

宣言済み一時表の索引には FREEPAGE を指定しないでください。

PCTFREE整数
Db2 ユーティリティを実行した結果、インデックスまたはインデックス・パーティションにエントリが追加された場合、または既存の行を持つテーブルにインデックスを作成する場合に、リーフページ以外の各ページに確保する空き領域の割合を決定します。 各ページの最初の項目は無条件にロードされます。 ノンリーフ・ページまたはリーフ・ページに 2 件目以降の項目が追加される場合には、 フリー・スペースのパーセントは少なくとも integer と同じ大きさになりま す。

integer の値の範囲は 0 から 99 までですが、 10 より大きな値を指定した場合は、フリー・スペースが 10 % だけノンリーフ・ページに残されます。 デフォルトは 10 です。

宣言済み一時表の索引には PCTFREE を指定しないでください。

パーティショニングされたインデックスの場合、特定のパーティションにおけるFREEPAGEとPCTFREEの値は、適用されるこれらの選択肢の最初のものによって与えられる

  1. そのパーティションに対する PARTITION 文節で与えられた FREEPAGE と PCTFREE の値。 どの PARTITION 文節の中でも 、free-specification を複数回使わないでください。
  2. どの PARTITION 文節にも含まれていない free-specification で指定された値。
  3. デフォルト値である FREEPAGE 0 および PCTFREE 10。
gbcache仕様
GBPCACHE
データ共用環境で、グループ・バッファー・プールにどの索引ページを書き込むか を指定します。 非データ共用環境では、 索引が宣言済み一時表にない限り、オプションは無視されます。 いずれの環境 (データ共用環境または非データ 共用環境) においても、宣言済み一時表の索引に GBPCACHE を指定しないでください。
変更済み
インデックスまたはパーティションにDb2 R/Wの関心がある場合に、更新されたページがグループバッファプールに書き込まれることを指定します。 Db2 R/W 間の利害関係がない場合、グループバッファプールは使用されません。 データ共有グループ内のメンバーがインデックスまたはパーティションをオープンしている場合、Db2 R/W 権限が存在します。また、少なくとも1人のメンバーが更新用にオープンしている場合にも、R/W 権限が存在します。 デフォルトは GBPCACHE CHANGED です。

索引が GBPCACHE(NO) と定義されているグループ・バッファー・プールにある場合 、CHANGED は無視され、ページはグループ・バッファー・プールに書き込まれません。

すべて
ページが、DASD から読み取られた時にグループ・バッファー・プールに書き込まれることを示します。
例外: 他の Db2 サブシステムがページセットに関心を持たない場合、 Db2 サブシステムを1つだけ更新する場合は、グループバッファプールにページは書き込まれません。

索引が GBPCACHE(NO) と定義されているグループ・バッファー・プールにある場合 、ALL は無視され、ページはグループ・バッファー・プールに書き込まれません。

NONE
ページがグループ・バッファー・プールに書き込まれないことを示します。 Db2 グループバッファプールを相互無効化のみに使用します。

パーティショニングされたインデックスの場合、特定のパーティションの GBPCACHE の値は、適用可能なこれらの選択肢の最初のものによって与えられます

  1. そのパーティションに対する PARTITION 文節で与えられた GBPCACHE の値。 どの PARTITION 文節の中でも 、gbpcache-specification を複数回使わないでください。
  2. どの PARTITION 文節にも含まれていない gbpcache-specification で与えられた値。
  3. デフォルト値は GBPCACHE CHANGED です。
DEFINE
索引の基礎データ・セットが物理的に作成される時期を指定します。 カタログ表 SYSINDEXPART の SPACE 列は、データ・セットの状況 (未定義または割り振り済み) を記録するために使用されます。 DEFINEキーワードが指定されていない場合、定義属性はベース・テーブル空間の現在の状態から継承されます。
YES
データ・セットは、索引の作成時 (CREATE INDEX ステートメントの実行時) に、作成されます。
NO
データ・セットは、データが索引に挿入されるまで作成されません。

NOは、 Db2 管理データセットのみに適用されます(USING STOGROUPが指定されています)。 DEFINE NO は、CREATE INDEX ステートメントのパフォーマンスが重要である場合、または DASD リソースに余裕のない場合に使用してください。

そのインデックスが定義されているテーブルにデータを伝搬するために、 Db2 以外のプログラムを使用する場合は、DEFINE NOをインデックスに使用しないでください。 テーブルのインデックスに対してDEFINE NOを使用し、 Db2 以外のプログラムからテーブルにデータが伝搬された場合、インデックス・スペース・データセットは割り当てられますが、 Db2 カタログにはこの事実が反映されません。 その結果、 Db2 はインデックス空間のデータセットを、まだ割り当てられていないものとして扱います。 結果の不整合により、Db2は、不整合が解決されるまでアプリケーション・プログラムにデータへのアクセスを拒否します。

ユーザーによって管理されるデータ・セット (USING VCAT が指定されている) の場合、 DEFINE NO は無視されます。 DEFINE NOは、空ではないテーブルにインデックスを作成する場合にも無視されます。

クローン関係に組み込まれた基本表に索引を作成する場合、DEFINE NO は指定しないでください。

宣言済み一時表の索引には DEFINE NO を指定しないでください。

COMPRESS NO または COMPRESS YES
索引データに対する圧縮を使用するかどうかを指定します。 その索引がパーティション化されている場合、この文節はすべてのパーティションに適用されます。
COMPRESS NO
索引の圧縮を使用しないことを指定します。

COMPRESS NO がデフォルトです。

COMPRESS YES
索引の圧縮を使用することを指定します。 索引の作成に使用するバッファー・プールのサイズは、8K、16K、または 32K でなければなりません。 ディスク上の物理ページ・サイズは 4K です。 索引の圧縮は即座に行われます。

索引の圧縮が推奨されるのは、削除操作がほとんどない、または全くない、順次挿入操作を行うアプリケーションです。 ランダムの挿入と削除は、圧縮に悪影響を及ぼす可能性があります。 また、索引の圧縮が推奨される対象は、主にスキャン操作に対してその索引が作成される場合のアプリケーションです。

INCLUDE NULL KEYS または EXCLUDE NULL KEYS
各キー列に NULL 値が入っているときに索引項目を作成するかどうかを指定します。
INCLUDE NULL KEYS
各キー列に NULL 値が入っているときに索引項目を作成するよう指定します。

INCLUDE NULL KEYS がデフォルトです。

EXCLUDE NULL KEYS
各キー列に NULL 値が入っているときに索引項目を作成しないよう指定します。 キー列が NULL 以外の場合に、索引項目が作成されます。
EXCLUDE NULL KEYS は、次とともに指定してはなりません。
  • UNIQUE
  • BUSINESS_TIME WITHOUT OVERLAPS
  • XMLインデックス仕様
  • キー表現
  • INCLUDE (列名 )

また、 列名で指定された列のいずれかが NOT NULL として定義されている場合、EXCLUDE NULL KEYS も指定してはなりません。

レンジによるパーティション

変更の開始PBR UTS 内のテーブル、または範囲パーティション化(非 UTS)テーブルスペース内のテーブルに対するインデックスのパーティションの様々な属性を指定します。変更の終わり

以下の状況では、PARTITION BY RANGE を指定してはなりません

  • 変更の開始PBG UTS内のテーブル、またはパーティション化されていないテーブルスペース内のテーブルに対するインデックス変更の終わり
  • 拡張インデックス用
  • BUSINESS_TIME WITHOUT OVERLAPSで定義されたインデックスの場合
PARTITION 整数
後続するオプション属性指定のパーティション番号を指定します。
USING (パーティション索引)
パーティション化索引の場合は、それぞれのパーティションごとに PARTITION 文節を指定します。 PARTITION 文節内では、USING 文節の指定は任意です。 USING 文節が存在する場合には、 副次索引に対して USING 文節が索引全体に適用されるのと同様に、そのパーティションに USING 文節 が適用されます。

PARTITION 文節に USING 指定がない場合、そのパーティションの USING 文節 のパラメーターは、PARTITION 文節の前に USING 文節が指定されているかどうかによって異なります。

  • USING 文節の指定がある場合は、USING 文節を含んでいない すべての PARTITION 文節にその USING 文節が適用されます。
  • USING 文節の指定がない場合は、以下のデフォルトがそのパーティションに適用されます。
    • データ・セットは、Db2によって管理されます。
    • データベースのデフォルト・ストレージ・グループが使用されます。 変更の開始インデックススペースのUSING句が省略された場合、データベースのデフォルトのストレージグループが存在している必要があります。変更の終わり
    • 変更の開始PRIQTY と SECQTY の両方にデフォルト値が -1 使用されます。変更の終わり
    • ERASE には値 NO が使用されます。
VCATカタログ名
名前が指定したカタログ名で始まるユーザー管理のデータ・セットを指定します。 示されている統合カタログ機能カタログには、索引の n 番目のデータ・セットの項目が既に含まれている必要があります。ここで、n はパーティション番号です。

データ・セットは、カタログ名が識別する統合カタログ機能カタログにカタログされた VSAM 線形データ・セットです。 カタログ名値の詳細については、「SQLにおける命名規則 」を参照してください。

Db2 サブシステムを複数使用して、現在のサーバーと統合カタログ機能のカタログを共有することができます。 これらのサブシステムが同じ名前を異なるデータ・セットに割り当てようとする可能性を回避するには、他の Db2 サブシステムによって使用されていない カタログ名 値を指定してください。

Db2 各パーティションに1つのデータセットのみが存在すると仮定しています。

STOGROUP stogroup-name
USING STOGROUP が明示的またはデフォルトでパーティション n に対して使用されている場合、 Db2 は CREATE INDEX 文の実行中に、指定されたストレージグループのスペースを使用して、そのパーティションのデータセットを定義します。 特権セットには、SYSADM 権限、SYSCTRL 権限、またはそのストレージ・グループ に対する USE 特権が含まれていなければなりません。 ストレージ・グループに使われる統合カタログ機能カタログには、 索引の n 番目のデータ・セットに関する項目が入って いてはなりません。
stogroup-nameは、現在のサーバに存在するストレージグループを識別する必要があり、権限セットには、以下の特権または権限のいずれかを含める必要があります。ただし、宣言されたグローバル一時テーブルにインデックスを作成する場合、 stogroup-nameがワークファイルデータベースのデフォルトのストレージグループと一致する場合はこの限りではありません
  • SYSADM 権限
  • SYSCTRL 権限
  • ストレージグループに対するUSE権限

あるパーティションについて、USING STOGROUP 文節で PRIQTY、 SECQTY、または ERASE を省略した場合、それらの値は、次にそのパーティションの制御を行う USING STOGROUP 文節によって与えられます。すなわち、どの PARTITION 文節にも含まれていない USING 文節、またはデフォルトの USING 文節です。 Db2 各パーティションに1つのデータセットのみが存在すると仮定しています。

フリースペック(パーティション)

パーティショニングされたインデックスの場合、特定のパーティションにおけるFREEPAGEとPCTFREEの値は、適用されるこれらの選択肢の最初のものによって与えられる

  1. そのパーティションに対する PARTITION 文節で与えられた FREEPAGE と PCTFREE の値。 どの PARTITION 文節の中でも 、free-specification を複数回使わないでください。
  2. どの PARTITION 文節にも含まれていない free-specification で指定された値。
  3. デフォルト値である FREEPAGE 0 および PCTFREE 10。

詳細はフリースペックをご覧ください。

gbpcache-specification (パーティション)

パーティショニングされたインデックスの場合、特定のパーティションの GBPCACHE の値は、適用可能なこれらの選択肢の最初のものによって与えられます

  1. そのパーティションに対する PARTITION 文節で与えられた GBPCACHE の値。 どの PARTITION 文節の中でも 、gbpcache-specification を複数回使わないでください。
  2. どの PARTITION 文節にも含まれていない gbpcache-specification で与えられた値。
  3. デフォルト値は GBPCACHE CHANGED です。

詳しくは、 gbcache-specification を参照してください。

DSSIZE integer G

パーティションのデータセットサイズを指定します。 CREATE INDEXでDSSIZEを指定できるのは、インデックスが相対ページ番号を持つPBRテーブルスペース上にある場合のみです。

索引が、相対ページ番号付けを使用するパーティション化索引である場合、ある特定のパーティションの DSSIZE の値は、次のうち最初に該当する選択肢によって指定されます。

  • そのパーティションに対する PARTITION 文節で与えられた DSSIZE の値。
  • どの PARTITION 文節にも含まれていない DSSIZE キーワードで与えられた値。
  • デフォルト値は基本表スペースから継承されます。

詳細は、 DSSIZE integer G を参照してください。

バッファプール bpname
変更の開始索引に使用するバッファー・プールを指定します。 特権セットには、SYSADM または SYSCTRL 権限、あるいはバッファプールの USE 特権が含まれている必要がある。ただし、宣言済みグローバル一時テーブルにインデックスを作成する場合で、 bpname がワークファイルデータベースのデフォルトインデックスバッファプールと一致する場合はこの限りではない。変更の終わり
bpnameは、有効化された 4KB、 8KB、 16KB、または 32KB バッファプールを特定しなければなりません。

ランダム挿入パターンの索引には、サイズのより小さいバッファー・プールを選択してください。 順次挿入パターンの索引には、サイズのより大きなバッファー・プールを選択してください。

bpname の詳細については、「SQLにおける命名規則 」を参照してください。 アクティブおよび非アクティブのバッファープールについては、「 Db2 データベースとバッファープールの管理 」を参照してください。

CLOSE
索引を使用していない場合に、オープン・データ・セットの数の 限度に到達したときにクローズできるデータ・セットかどうかを指定します。
はい
クローズができます。 索引が宣言済み一時表にない限り、これはデフォルトです。
いいえ
クローズはできません。

オープン・データ・セット数が限度に達し、かつ、クローズするための CLOSE YES を指定したページ・セットがない場合、CLOSE NO を指定したページ・セットがクローズされます。

宣言された一時テーブルのインデックスについては、 Db2 は指定された値に関わらずCLOSE NOを使用します。

DEFER
CREATE INDEX ステートメントの実行中に索引を作成するかどうかを示します。 指定したオプションに関係なく、索引およびその索引スペースの 記述がカタログに追加されます。 表が空であると判別されて、DEFER YES が指定されている場合、索引は作成されることも、再ビルド・ペンディング状況になることもありません。 DEFER の使用に関する詳細は、「インデックス名とガイドライン 」を参照してください。 宣言済み一時表または補助表上の索引に対して、DEFER を指定しないでください。
いいえ
索引を作成します。 これはデフォルトです。
はい
索引を作成しません。 表にデータが入ると、索引は再ビルド・ペンディング状況に置かれ、警告メッセージが出されます。 これは、REBUILD INDEX ユーティリティーを使って索引を再ビルドする必要があることを示します。
変更の開始DSSIZE 整数 G変更の終わり
変更の開始

FL 500 パーティション インデックスの各パーティションの最大サイズを指定します。 1~1024の任意の整数を指定できます(例: 1 G または 1024 G )。 DSSSIZE句は、非分割のセカンダリ・インデックスでは無効です。 DSSIZE を CREATE INDEX に指定できるのは、索引が相対ページ番号を使用する表スペースにある場合だけです。

4G より大きい値を指定するには、テーブルスペースのデータセットを、拡張形式および拡張アドレス指定で指定された DFSMS データクラスに関連付ける必要があります。

索引が、相対ページ番号付けを使用するパーティション化索引である場合、ある特定のパーティションの DSSIZE の値は、次のうち最初に該当する選択肢によって指定されます。

  • そのパーティションに対する PARTITION 文節で与えられた DSSIZE の値。
  • どの PARTITION 文節にも含まれていない DSSIZE キーワードで与えられた値。
  • デフォルト値は基本表スペースから継承されます。

整数部は、0個以上のスペースでGと区切ることができる。

変更の終わり
PIECESIZE整数
非パーティション索引の各データ・セットの最大アドレス可能度を指定します。 次のキーワード K、M、または G は integer に指定された値の単位を示します。
K
最大データ・セット・サイズをバイト単位で指定するために、integer 値に 1024 を掛けることを指定します。 整数である必要があります。1~268435456の範囲で2のべき乗である必要があります。
M
最大データ・セット・サイズをバイトで指定するために、integer 値に 1048576 を掛けることを指定します。 整数型は、1~262144 の範囲で2のべき乗でなければなりません。
G
最大データ・セット・サイズをバイトで指定するために、integer 値に 1073741824 を掛けることを指定します。 整数型は、1~256の範囲で2のべき乗でなければなりません。
整数は、0 個以上のスペースで K、M、または G から区切ることができます。 整数
次の表は、テーブルスペースのサイズによって異なるデータセットサイズの有効な値を示しています。
表 1. PIECESIZE 文節の有効な値
K 単位 M 単位 G 単位 表スペースのサイズ属性
256K      
512K      
1024キロ 1M    
2048 K 2M    
4096 K 4M    
8192 K 8M    
16384 K 16M    
32768 K 32 M    
65536 K 64M    
131072 K 128M    
262144 K 256M    
524288 K 512M    
1048576 K 1024 M 1 G  
2097152 K 2048 M 2 G  
4194304 K 4096 M 4 G LARGE、DSSIZE 4 G(またはそれ以上)
8388608 K 8192 M 8 G DSSIZE 8 G (またはそれ以上)
16777216 K 16384 M 16 G DSSIZE 16 G (またはそれ以上)
33554432 K 32768 M 32 G DSSIZE 32 G(またはそれ以上)
67108864 K 65536 M 64 G DSSIZE 64 G(またはそれ以上)
134217728 K 131072 M 128 G DSSIZE 128 G (またはそれ以上)
268435456 K 262144 M 256 G DSSIZE 256 G

PIECESIZE は 1 次および 2 次スペース割り振りには影響を及ぼしません。その理由は、この指定は、データ・セットが保有可能な最大量のデータの指定だけであり、実際のストレージ割り振りではないからです。

PIECESIZE 値を ALTER INDEX ステートメントで変更する 場合、その索引は REBUILD ペンディング状況になります。

COPY
索引に関して COPY ユーティリティーを使用できるかどうかを指示します。 宣言済み一時表の索引には COPY を指定しないでください。
いいえ
索引に関する全イメージ・コピーまたは並行コピー、 あるいは RECOVER ユーティリティーの使用を許可しません。 デフォルトはNOです。
はい
フル・イメージまたは並行コピー、および索引に 関する RECOVER ユーティリティーの使用を許可します。

注釈 CREATE INDEX

所有者特権
テーブルの所有者は、すべてのテーブル権限 ( GRANT ステートメント (テーブルまたはビューの権限) を参照) を持ち、これらの権限を他のユーザーに付与することができます。 オブジェクトの所有権に関する詳細は、「権限、特権、許可、マスク、およびオブジェクトの所有権 」を参照してください。
DEFER句の効果
DEFER NOが暗黙的または明示的に指定された場合、 Db2 ユーティリティが識別されたテーブルを含むテーブルスペースを制御している間は、CREATE INDEX文を実行できません。

指定した表に既にデータが入っている場合は、索引の作成が 据え置かれないのであれば、CREATE INDEX によってその索引エントリー が作成されます。 表にまだデータが含まれていない場合、CREATE INDEX は索引記述を作成します (索引項目は、データが表に挿入される時点で作成されます)。

インデックスの式を評価する際に発生したエラー
索引に対する式の評価中に発生するエラーが、式に評価時に戻ります。 このエラーが発生する可能性があるのは、SQL データ変更ステートメント、SQL データ変更ステートメントからの SELECT、または REBUILD INDEX ユーティリティーの実行時です。 例えば、column_1 の値が 0 の場合、式10 / column_1の評価はエラーを返します。 このエラーは、表が空ではなく、column_1 にゼロの値を持つ行が含まれている場合に、CREATE INDEX の処理中に戻されます。そうでない場合、column_1 にゼロの値を持つ行が挿入または更新されると、挿入または更新操作の処理中にエラーが戻されます。
文字列型を返す式の結果の長さ
キー式の結果データ型が文字列型であり、バインド時に結果の長さを計算できない場合、長さはそのデータ型の最大許容長または Db2 が推定できる最大の長さに設定されます。 この場合、この CREATE INDEX ステートメントは失敗する可能性があります。その理由は、合計のキー長が索引キーの限界を超える可能性があるからです。

例えば、式 REPEAT('A', CEIL(1.1)) の結果の長さが VARCHAR(32767) であり、式 SUBSTR(DESCRIPTION,1,INTEGER(1.2)) の結果の長さが DESCRIPTION 列の長さであるとします。 その結果、key-expression としてこれらの式のどちらも使用する CREATE INDEX ステートメントは作成されない可能性があります。その理由は、合計のキー長が索引キーの限界を超える可能性があるからです。

キー列に対するASCまたはDESCの使用
親キーまたは外部キーの列に ASC または DESC を使用する際の制約はありません。 外部キーの索引は、対応する親キーの索引と昇順および降順の属性が同じである必要はありません。
EBCDIC、ASCII、およびUNICODEのインデックス用エンコーディング方式
一般に、索引のコード化スキームは、その関連する表と同じです。 ただし、EBCDIC 表の索引が Unicode 列のみで構成されている場合、索引のコード化スキームは Unicode です。
パーティション化索引の最大パーティション・サイズ
パーティション化索引のサイズは、対応するパーティション化表スペースが LARGE キーワードまたは DSSIZE キーワードを指定して作成されているかどうか、およびパーティションの数によって異なります。

次の表に、LARGE キーワードまたは DSSIZE キーワードを指定せずに作成され、パーティション数が 64 以下の表スペースのパーティション化索引に関する情報を示します。

表 2. LARGE 文節または DSSIZE 文節を指定せずに作成され、64 以下の NUMPARTS 値を持つパーティション化表スペースのパーティション化索引の最大断片数およびデフォルトのサイ
パーティション化表スペース (非 LARGE) の定義 パーティション化索引の断片の最大数 データ・セットごとのパーティション化索引のデフォルト・サイズ
NUMPARTS <= 16 16 4G
NUMPARTS >= 17
しかし、
NUMPARTS &lt;= 32
32 2G
NUMPARTS >= 33 64 1G

次の表に、LARGE キーワードまたは DSSIZE キーワードを指定して作成され、パーティション数が 64 を超える表スペースのパーティション化索引に関する情報を示します。

表 3. LARGE 文節または DSSIZE 文節を指定して作成され、65 以上の NUMPARTS 値を持つパーティション化表スペースの最大断片数およびデフォルトのパーティション化索引サイズ
パーティション化表スペース (LARGE) の定義 パーティション化索引の断片の最大数 パーティション化索引のデフォルトの索引断片サイズ
次の条件の 1 つ以上が当てはまります。
  • LARGE 文節 - 指定済み
  • 変更の開始NUMPARTS が 64 より大きく 256 より小さい場合で、かつ DSSIZE 句が指定されていない場合変更の終わり
パーティション化表スペース内のパーティションの最大数 4G
次の条件の 1 つ以上が当てはまります。
  • DSSIZE 文節 - 指定済み
  • NUMPARTS は 256 より大か等しい
パーティション化表スペース内のパーティションの最大数
MIN(table space DSSIZE, 2^32/
(Maximum number of partitions
in the table space) * index
page size)

パーティション化索引の最大データ・セット・サイズを計算するには、最初に次の式を使用して、表スペース内のパーティションの最大数を計算する必要があります。

MIN(4096, 2^32/ (table space DSSIZE / table space page size))

表スペースのパーティションの最大数を計算した後、次の式で、上記で計算したパーティション数を使用して、パーティション化索引の最大データ・セット・サイズを計算できます。

MIN(table space DSSIZE, 2^32/
(Maximum number of partitions in the table space) * index page size)

変更の開始COMPRESS YES で定義されたインデックスの場合、 インデックスページサイズは常に 4096 バイト 4KB です。変更の終わり

例えば、表スペースとその表スペースの索引に以下の特性があるとします。

  • DSSIZE: 64 GB
  • ページ・サイズ: 32 KB
  • 索引のページ・サイズ: 4 KB
  • パーティションの最大数: 2048

上記の特性を踏まえて、表スペースのパーティションの最大数の計算を開始できます。

MIN(4096, 2^32/ (64GB / 32KB)) = 2048

次に、値 2048 を使用して、パーティション化索引の最大データ・セット・サイズを計算できます。

MIN(64 GB, 2^32/ 2048 * 4KB)
= MIN(64GB, 8GB)
= 8GB

非パーティション化索引の断片数および最大断片サイズ:
1 つの索引が保有可能なデータの最大量は、索引の最大断片数に、1 つの断片が保有可能なデータの最大量を掛けて算出します。

非パーティション索引の場合、1 つの索引が保有可能なデータの最大量は、PIECESIZE パラメーターを使用して定義されます。

索引のデフォルト断片サイズは、次のようになります。

  • LARGE オプションまたは DSSIZE オプションを指定せずに作成された表スペースの索引の場合、2 GB (PIECESIZE 2 G)
  • LARGE オプションまたは DSSIZE オプションを指定して作成された表スペースの索引の場合、4 GB (PIECESIZE 4 G)
  • 補助索引の場合、4 GB (PIECESIZE 4 G)

次の表では、各種表スペースの最大断片数と、デフォルトの索引断片サイズをリストしています。

表 4. LARGE 文節または DSSIZE 文節を指定せずに作成され、64 以下の NUMPART 値を持つパーティション化表スペースの最大断片数およびデフォルトの索引断片サイズ
パーティション化表スペース (非 LARGE)、NUMPART 値の定義 非パーティション化索引の断片の最大数 非パーティション化索引のデフォルトの索引断片サイズ
NUMPARTS <= 16 32 2G
NUMPARTS >= 17
しかし、
NUMPARTS &lt;= 32
32 2G
NUMPARTS >= 33 32 2G
表 5. LARGE 文節または DSSIZE 文節を指定して作成され、65 以上の NUMPARTS 値を持つパーティション化表スペースの最大断片数およびデフォルトの索引断片サイズ
パーティション化表スペース (LARGE) の定義 非パーティション化索引の断片の最大数 非パーティション化索引のデフォルトの索引断片サイズ
  • LARGE 文節 - 指定済み
  • DSSIZE 文節 - 未指定
MIN(4096, 2^32/
(x/y))

- 1 を参照
4G
  • LARGE 文節 - 未指定
  • DSSIZE 文節 - 未指定
  • NUMPARTS 文節 - 64 より大きいが 256 より小さい
MIN(4096, 2^32/
(x/y))

- 1 を参照
4G
  • LARGE 文節 - 未指定
  • DSSIZE 文節 - 指定済み、または NUMPARTS 文節 - 256 以上
MIN(4096, 2^32/
(x/y))

- 1 を参照
4G
注:
  1. 非パーティション索引では、式、MIN(4096, 2^32 / (x / y)) の場合、非パーティション索引の断片の最大数を判別します。ここで、x および y は、以下の値を取ります。
    • x は、(SYSIBM.SYSINDEXES カタログ表の PIECESIZE 列に格納された) 索引の断片サイズ
    • y は、(SYSIBM.SYSINDEXES カタログ表の PGSIZE 列に格納された) 索引のページ・サイズ
表 6. 非パーティション化表スペースの最大断片数およびデフォルトの索引断片サイズ
非パーティション化表スペースのタイプ 最大断片数 デフォルトの索引断片サイズ
非セグメント化表スペース 32 2G
セグメント化表スペース 32 2G
LOB、補助表スペース、または XML 表スペース 32 4G
PIECESIZE の値の選択
PIECESIZE の値を選択するには、非パーティション化索引のサイズを必要なデータ・セット数で除算します。 例えば、非パーティション化索引に 5 個のデータ・セットが必要で、索引が 10 MB (でこれ以上増大することは考えられない) 場合には、PIECESIZE 2 M を指定します。 非パーティション化索引がさらに増大しそうな場合は、より大きな値を選択してください。

基礎表スペースが LARGE として定義されておらず、DSSIZE パラメーターでも指定されていない場合、データ・セットの限界は 32 であり、254 を超える部分からなるオブジェクトの場合、限界は 4096 であることに注意してください。 LARGE として定義されている表スペース、または DSSIZE パラメーターを指定して定義されている表スペースに対する非パーティション索引では、最大は MIN(4096, 232 / (index piece size/index page size)) です。

1 次および 2 次の量の値を選択するときは、PIECESIZE の値に留意してください。 1 次数量と 2 次数量の和を PIECESIZE に等分できるようにすると理想的です。

索引のドロップ

パーティション索引をドロップできます。

補助表上の索引でない副次索引は、索引をドロップするだけで簡単に ドロップできます。 補助表の空の索引は、明示的にドロップできます。内容が入っている索引は、 他のオブジェクトをドロップするだけでドロップできます。 詳細は、「補助テーブルおよび補助テーブルのインデックスの削除 」を参照してください。

索引が主キー、ユニーク・キー、または参照制約を適用するユニーク索引である場合には、 索引をドロップする 前に、制約をドロップする必要があります。 DROPステートメントを参照してください。

テーブルスペースがインデックス制御パーティショニング(非推奨)を使用している場合、テーブルスペースはテーブル制御パーティショニングに変換されます。 詳細については、「テーブルスペースをテーブル制御パーティショニングで使用するための変換」 を参照してください。

テーブルに対する一意インデックスおよびUNIQUEまたはPRIMARY KEY仕様の強制
CREATE または ALTER TABLE ステートメントで UNIQUE 文節または PRIMARY KEY 文節を使用する場合、あるいは GENERATED BY DEFAULT として定義されている ROWID 列がある場合、その表にはユニーク索引 (UNIQUE WHERE NOT NULL として定義されていない) が必要です。 Db2 テーブルスペースが明示的に作成され、CREATEまたはALTER TABLE文がスキーマプロセッサによって処理される場合、またはテーブルスペースが暗黙的に作成される場合、それらの一意のインデックスが暗黙的に作成されます。それ以外の場合、それらを明示的に作成する必要があります。 明示的に定義しなければならないユニーク索引の中に存在していない索引が 1 つでもあると、 表の定義は不完全なものとなります。この場合には、以下の 規則が適用されます。
  • K は、必要なユニーク索引が存在しないキーを示し、 n は、表の定義を完成させるために これから作成しなければならないユニーク索引の数を示すものとします。 (索引のない新規の表の場合、K はその主キーまたは CREATE または ALTER TABLE ステートメント で UNIQUE として定義されているいずれかのキーであり、n は これらのキーの数です。 表の定義の完了後、索引が主キーまたはユニーク・キーを適用している場合には、索引をドロップすることはできません。)
  • ユニーク索引を作成すると、索引キーが K と同じであれば、n が 1 つ減ります。 キーが同一であるのは、同じ列を同じ順序で持つ場合のみです。
  • n がゼロになった時点で、 索引を作成することによる表の定義は完了します。
  • K が主キーの場合、索引の記述は、それが 1 次索引であることを示します。 K が主キーでない場合、索引の記述は、CREATE または ALTER TABLE ステートメント で UNIQUE として定義されたキーは固有の値にするという条件に従った 処理を実施することを示します。

ユニーク索引は、マテリアライズ照会表に対して作成することはできません。

一意インデックスとXML列
その索引がユニークな XML 列上で XML 索引である場合、指定されたパターンの値に対して一意であることがその列の全文書を通じて適用され、指定された SQL データ・タイプにその値がキャストされた後で、その値に関して一意であることが強制されます。 データ・タイプ変換の結果として精度と正規化が失われる可能性があるため、XML 文書の中でユニークであるように見える複数の値が依然として重複エラーとなる可能性があります。 式を使用して索引を定義すると、その索引に格納される値に対して (列のオリジナルの値に対してではなく) 一意であることが強制されます。 その WHERE NOT NULL XMLPATTERN も指定されている場合は、警告が表示されて仕様が無視され、インデックスは指定されているかのように扱われます。 UNIQUE 指定されたものとして扱われます。
関数を含むXPathパターン式を使用したXMLインデックスの定義
関数 (fn:exists() や fn:upper-case() を含む) を含む XPath pattern-expression は、2 つの部分を持ちます。 最初の部分は、コンテキスト・ステップ と呼ばれる部分で、索引項目の作成先であるエレメント・ノードまたは属性ノードの XPath を指定します (エレメントまたは属性の NodeID が索引に組み込まれます)。 コンテキスト・ステップは、XML 索引用の XPath pattern-expression と同じ構文に従いますが、例外があり、fn:exists() の場合はエレメント・ノードを指定する必要があり、fn:upper-case() の場合はエレメント・ノードまたは属性ノードを指定する必要があります。

2 つ目の部分は、関数式ステップ と呼ばれる部分で、XPath 関数 fn:exists() または fn:upper-case() を指定します。 関数式ステップは、XPath pattern-expression の右端の部分です。 関数式ステップでは、コンテキスト・ステップで指定されているノードごとに、索引のキー値を指定します。 例えば、XPath pattern-expression /purchaseOrder/items/item/fn:exists(shipDate) の場合、 コンテキスト・ステップは /purchaseOrder/items/item であり、 関数式ステップは fn:exists(shipDate) です。

PARTITIONEDキーワードの使用
パーティション化索引を作成する場合に追加のキーワードを指定しなければ、索引は非パーティション化索引になります。 キーワード PARTITIONED を指定すると、索引はパーティション化索引になります。 PARTITION BY RANGE を指定する場合、その索引は表のパーティション列に対して定義されるので、データ・パーティション化索引でもキー・パーティション化索引でもあります。 パーティション索引の定義に適合しないパーティション表スペースの索引は、副次索引です。 副次索引を作成する場合に追加のキーワードを指定しなければ、副次索引は非パーティション化索引 (NPSI) になります。 キーワード PARTITIONED を指定すると、索引はデータ・パーティション副次索引 (DPSI) になります。
パーティション境界なしで作成されたテーブルに対するパーティションインデックスの作成
パーティション境界を指定せずに ENDING AT 節を使用してテーブルが作成された場合、パーティショニング・インデックスが作成されるまでは、テーブルは不完全です。 テーブルに対して最初に作成されるインデックスでは、PARTITION 節と ENDING AT 節の両方を指定する必要があります。

インデックス作成時にPARTITION句を指定する場合は、PARTITIONED句またはENDING AT句も指定する必要があります。

クローン関係に関わるテーブルに関する考慮事項
クローン関係に組み込まれた基本表上に索引を作成する場合、同一名が付いた索引もクローン表上にも作成されます。 クローン表上の索引は、その索引作成時にクローン表が空の場合を除き、再ビルド・ペンディングになります。
行変更タイムスタンプ列を含むテーブルに関する考慮事項
表の中で行変更タイム・スタンプ列を含む索引を作成するには、すべての行に対する列の中に値が既に存在している必要があります。 ある行が表の中で挿入または更新されると必ず、行変更タイム・スタンプ列に値が格納されます。 その行変更タイム・スタンプ列が各行を含む既存の表に追加されると、行変更タイム・スタンプ列に対する値は、ALTER TABLE ステートメントの実行時にマテリアライズおよび格納は行われません。 これらの行に対して値がマテリアライズされるのは、その行の更新時、あるいは REORG または LOAD REPLACE ユーティリティーがその表またはその表スペース上で実行された時です。
定義への変更が保留中の場合におけるテーブルスペースの制限
表スペースの定義または表スペース内の任意のオブジェクトの定義に対する保留中の変更がある場合は、CREATE INDEX ステートメントは許可されません。 さらに、LOB 列のインライン長が変更されており、表スペースが再編成されていない表に対しては、式を参照する索引は作成できません。
DEFINE NO および INCLUDE NULL KEYS または EXCLUDE NULL KEYS の効果
(暗黙的または明示的に) INCLUDE NULL KEYS に DEFINE NO が指定されており、索引付け中の表に入力されている場合、警告が戻され、索引が作成され、データ・セットが定義されます。 EXCLUDE NULL KEYS を指定したときに、索引付けされている表のすべての行で、すべてのキー列に NULL 値が入っている場合にはデータ・セットが定義されないようにすることができます。 索引は、CREATE INDEX ステートメントの後は空になります。 ただし、DEFINE NO が EXCLUDE NULL KEYS を使用して指定されると、警告が戻されます。
カタログテーブル Db2 へのインデックス作成

カタログテーブルのインデックス作成の詳細については、 カタログで許可されているSQLステートメントを参照してください。

EA 使用可能索引データ・セット:
EA対応のテーブルスペースにインデックスが作成される場合、インデックスのデータセットは、拡張形式と拡張アドレス指定属性を持つ DFSMS データクラスに属するように設定する必要があります。
代替構文およびシノニム:
Db2 または Db2 ファミリーの他の製品の以前のリリースとの互換性を確保するため、 Db2 では、パーティション化されたインデックスを作成する際に、以下のキーワードをサポートしています
  • PART 整数 VALUES 代替構文として PARTITION 整数 ENDINGPARTITION BY RANGE パーティション要素節の前に置かれるキーワードは任意です。

これらのキーワードは代替としてサポートされていますが、推奨される構文ではありません。

変更の開始パディングありとパディングなしのインデックス変更の終わり
変更の開始

インデックス内の可変長文字列カラムを最大長までパディングしないようにするには、NOT PADDED オプションを指定します。パディングを行うことも可能です。 パッデッドインデックスは特定の状況でデータへのインデックスのみアクセスを妨げる可能性があり、非パッデッドインデックスにはいくつかの利点がある一方、いくつかの欠点も存在する。 詳細情報については、パディングありまたはパディングなしのインデックスを参照してください

PADIXサブシステムパラメータは、可変長カラムがデフォルトでパディングされるかどうかを制御します。 詳細については、 PAD INDEXES BY DEFAULT フィールド(PADIX サブシステムパラメータ) を参照してください。

変更の終わり
カタログテーブルに対するユーザー定義インデックス
カタログ・テーブル上のインデックスに対してCREATE INDEXを発行し、USING句を指定した場合、 Db2 は、その句を無視します。 その代わりに、 Db2 はインデックスデータセットを定義し、管理します。 それらのデータ・セットは、デフォルトのスペース属性に基づいてカタログ・データ・セットと同じ SMS 環境で定義されます。
変更の開始時間参照制約変更の終わり
変更の開始テンポラル参照制約の外部キーには索引が必要です。 索引は、以下のいずれかの方法で定義される必要があります。
  • 列とキー式の後に BUSINESS_TIME WITH OVERLAPS 文節を指定します。
  • BUSINESS_TIME 期間の終了列、その後に BUSINESS_TIME 期間の開始列を索引の最後の 2 つのキーとして指定します。 これらの各列には ASC を使用する必要があります。

表に対してテンポラル参照制約が定義される場合、外部キーの索引の基準を満たす作成済みの最初の索引が制約の従属として記録されます。 テンポラル参照制約の外部キーに使用される索引はドロップできません。 テンポラル参照制約に使用されている索引には列を追加できません。

変更の終わり

CREATE INDEX

  • テーブル DSN8C10. DEPT に、 DSN8C10.XDEPT1 という名前の一意のインデックスを作成します。 索引エントリーは、単一の列 DEPTNO の昇順に並べます。 Db2 インデックス用のデータセットを定義するには、ストレージグループを使用します DSN8G120。 各データ・セットは、最大 1 メガバイトのデータを 収容する必要があります。 各データ・セットの 1 次スペース割り振りには 512 キロバイト を、2 次スペース割り振りには 64 キロバイトを使用します。 これらの指定によって、各データ・セットは新規データ・セットを使用する前の 8 倍 (512KB + (8*64KB)= 1024KB) に拡張することができます。 索引の埋め込みを行います。

       CREATE UNIQUE INDEX DSN8C10.XDEPT1
         ON DSN8C10.DEPT
           (DEPTNO ASC)
         PADDED
         USING STOGROUP DSN8G120
           PRIQTY 512
           SECQTY 64
           ERASE NO
         BUFFERPOOL BP1
         CLOSE YES
         PIECESIZE 1 M;

    誰も索引を使用しておらず、索引をドロップすれば削除する必要は ない場合は、データ・セットをクローズすることができます。

    上記の例では、索引用の基礎データ・セットは即時に作成されます。これは デフォルト (DEFINE YES) です。 表 DSN8C10. DEPT が空であると仮定すると、データが最初に索引に挿入されるまでデータ セットの作成を延期する場合は、デフォルトの動作を受け入れる代わりに、DEFINE NO を指定します。 PADDED の指定により、索引内の可変長文字ストリング列にブランクが埋め込まれるようにします。

  • DSN8C10. DEPTDSN8C10.XDEPT1 という名前のセカンダリ インデックスを作成します。 列 DEPTNO の昇順に項目を並べます。 データ・セットはカタログ名が DSNCAT のユーザーによって管理され、各データ・セットは、 次のデータ・セットが使用される前に、最大 1GB のデータを収容するものとします。
      CREATE UNIQUE INDEX DSN8C10.XDEPT1
        ON DSN8C10.DEPT
          (DEPTNO ASC)
        USING VCAT DSNCAT
        PIECESIZE 1048576 K;
  • 各従業員の写真用に、データ型が BLOB( 110K )の列「EMP_PHOTO」がサンプル従業員テーブルに追加され、LOBテーブルスペース DSN8D12A.PHOTOLTSに補助テーブル「EMP_PHOTO_ATAB」が作成され、列のBLOBデータを保存すると仮定します。 補助表の XPHOTO という名前の索引を作成します。 データ・セットはカタログ名 DSNCAT で ユーザー管理されます。
      CREATE UNIQUE INDEX DSN8C10.XPHOTO
         ON DSN8C10.EMP_PHOTO_ATAB
         USING VCAT DSNCAT
         COPY YES; 

    この例では、補助索引には暗黙的に生成されたキーがないため、キーのための列は 指定されません。

変更の開始

インデックス制御データ分割の構文と説明(非推奨)

パーティション化 (非 UTS) 表スペースの場合、Db2は、表制御のパーティション化と索引制御のパーティション化の両方をサポートします。 表制御のパーティション化は、索引制御のパーティション化に比べて、より多くのオプションと柔軟性が提供されます。 インデックス制御によるパーティショニングには、パーティショニングを制御するためのパーティショニングインデックスが必要です。 変更の開始ベーステーブル用の非UTSテーブルスペースは非推奨となり、将来的にサポートされなくなります。変更の終わり

ヒント: 最良の結果を得るには、インデックス制御パーティショニングを使用する新しいテーブルを作成しないこと、また、インデックス制御パーティショニングを使用する既存のテーブルはすべて、テーブル制御パーティショニングとPBR UTSを使用するように変換する計画を立ててください。 詳細については、「テーブルスペースをテーブル制御パーティショニングで使用するための変換」 を参照してください

インデックス制御パーティショニングを使用する新しいテーブルの作成を防止するには、サブシステム・パラメータ PREVENT_NEW_IXCTRL_PART をデフォルト値の YES に設定します。 詳細については、 マクロ DSN6SPRM の PREVENT_NEW_IXCTRL_PART を参照してください。

構文図を読むビジュアルシンタックスダイアグラムをスキップするPARTITION BYRANGE(,partition-element1しようしようしょ自由仕様gbpcache仕様DSSIZE整数G)
partition-element
構文図を読むビジュアルシンタックスダイアグラムをスキップする PARTITION整数 ENDINGAT(,定数MAXVALUEMINVALUE)INCLUSIVE
注:
  • 1 各条項は1回だけ指定してください。
PARTITION BY RANGE
表のパーティション索引を指定します。この索引は、表のデータのパーティション・スキームを決定します。

PARTITION BY RANGE を指定する必要があるのは、表スペースがパーティション化されており、パーティショニング・スキーマがまだ確立されていない場合だけです。

インデックスが拡張インデックスである場合、BUSINESS_TIME WITHOUT OVERLAPSで定義されている場合、またはテーブルがUTSまたは非パーティショニングテーブルスペースにある場合は、PARTITION BY RANGEを指定してはなりません。

partition-ending-at (非推奨)
各パーティションの範囲を指定します。
パーティション 整数
PARTITION 文節は、パーティション索引の 1 つのパーティション内で索引キーの最高値を指定します。 ここで言う最高とは、索引列のソート・シーケンスの中で最高であることを意味します。 昇順 (ASC) として定義された列においては、最高と 最低がその言葉通りの意味を持ちます。 降順 (DESC) として定義された列においては、実際には 最低の値がソート・シーケンスでは最高値になります。

CLUSTER を使うときは、パーティション化表スペースに含まれている表の場合、(CREATE TABLESPACE で NUMPARTS を使って定義された) 各パーティションごとに必ず PARTITION 文節を 1 つ使う必要があります。 p 個のパーティションが存在する場合、integer の 値の範囲は 1 ~ p の範囲でなければなりません。

パーティションの最高値の長さ (限界キーとも呼ばれる) は、パーティション索引の長さと同じです。

ENDING AT (constant、MAXVALUE、または MINVALUE...)
この索引がパーティション索引であることを指定し、データをパーティション化する方法を指示します。 このパーティション索引の作成後、表スペースに完了のマークが付けられます。 各PARTITION句のENDING ATの後には、少なくとも1つの値 (定数、MAXVALUE、またはMINVALUE)を使用する必要があります。 キーの中の列と同じ数だけ定数を使うことができます。 表または前の索引を作成したときに VALUES ステートメントが既に指定されていない限り、すべての値を連結したものが、索引の対応するパーティション内のキーの最高値となります。
定数
定数値は、その値を列に割り当てるときの規則に適合したデータ・タイプで指定します。 ストリング定数がその列の長さ属性に必要な長さより長いか短い場合、 定数は必要な長さになるまで、右端から切り捨てられるか右側に埋め込みが 行われます。 列が昇順の場合、埋め込み文字は X'FF' です。 列が降順の場合、埋め込み文字は X'00' です。 10 進定数の精度と位取りは、それに対応する列の精度と 位取りより大きくてはなりません。 16 進数ストリング定数 (GX) は指定できません。
MAXVALUE
パーティション境界の限界キーに対してその最大値よりも大きい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'FF')。 パーティション・キー内のすべての列が昇順の場合、MAXVALUE の 後ろで定数や MINVALUE 文節を指定できません。 MAXVALUE が指定されると、後続の列はすべて MAXVALUE でなければなりません。
MINVALUE
パーティション境界の限界キーに対してその最小値よりも小さい値を指定し ます (すなわち、その列が昇順または降順かどうかに関係なくすべてが X'00')。 パーティション・キー内のすべての列が降順の場合、MAXVALUE の後に定数または MAXVALUE 節は指定できません。 MINVALUE が指定された後の後続の列はすべて MINVALUE である必要があります。

このキー値は以下の規則に制約されます。

  • 最初の値がキーの 1 列目に対応し、2 番目の値が 2 列目に 対応するといった形で、以下同様に続いていきます。 キーにある列数より少ない数の値を使用すると、列が昇順か降順かに応じて、省略した列に対して最高値または最低値を使用した場合と同じ効果があります。
  • キーに ROWID 列または ROWID データ・タイプに基づく特殊タイプの列が含まれている場合は、対応する ROWID 列に対して指定された定数の先頭 17 バイトが使用されます。
  • どのパーティションにおいても、キーの最高値は、次のパーティション内のキーの 最高値より低位でなければなりません。
  • すべての値の連結が 255 バイトを超える場合は、先頭 255 バイトのみが使用されます。
  • 最終パーティションのキーの最高値は、表スペースの定義によって異なります。 LARGE オプションまたは DSSIZE オプションを指定せずに作成された表スペースの場合、VALUES の後に指定した値は適用されません。 表に置くことができるキーの最も高い値が、キーの取り得る最も高い値です。

    大規模なパーティション表スペースの場合は、指定した値が適用されます。 最終パーティションに対して指定される値は、表に置くことができるキーの最高値です。 最終パーティションに指定した値より大きいキーは範囲外です。

ENDING AT は、基になるテーブルに対する以前のCREATEまたはALTER TABLE文でENDING AT節が指定されていない場合にのみ指定できます。

INCLUSIVE
範囲の指定に使用した値をデータ・パーティションに含めるように指定します。

インデックス制御によるパーティショニングの例(非推奨)

  • データベース内のテーブルEMPに、 XEMP2 という名前のクラスタインデックスを作成します。 DSN8C10。 列 EMPNO の昇順に項目を並べます。 Db2 に、ストレージグループを使用して各パーティションのデータセットを定義させます DSN8G120。 主記憶領域の割り当てを36キロバイトとし、 Db2 がSECQTYのデフォルト値を使用できるようにします。この例では、デフォルト値は12キロバイト( 4KB の3倍)です。 索引がドロップされる場合に、データ・セットを消去する必要はありません。

    4 つのパーティションができ、そこに次のように索引エントリーを分けます。

    索引をバッファー・プール BP1 と関連付け、誰も索引を使用して いない時は、データ・セットをクローズできるようにします。 フル・イメージ・コピーまたは 並行コピーのための COPY ユーティリティーの使用と、RECOVER ユーティリティーの 使用を可能にします。
       CREATE INDEX DSN8C10.XEMP2
         ON DSN8C10.EMP
           (EMPNO ASC)
         USING STOGROUP DSN8G120
           PRIQTY 36
           ERASE NO
           CLUSTER
           PARTITION BY RANGE
           (PARTITION 1 ENDING AT('H99'),
            PARTITION 2 ENDING AT('P99'),
            PARTITION 3 ENDING AT('Z99'),
            PARTITION 4 ENDING AT('999'))
         BUFFERPOOL BP1
         CLOSE YES
         COPY YES;
変更の終わり