スケーラブルデータベースサーバ HiRDB Version 8 SQLリファレンス
CREATE INDEX 形式1(インデクス定義)
機能
実表の一つ,又は複数の列にインデクスを定義します。
使用権限
形式1<インデクスの定義>
CREATE 〔UNIQUE〕 INDEX 〔認可識別子.〕インデクス識別子 ON 〔認可識別子.〕表識別子(列名〔{ASC|DESC}〕 〔,列名〔{ASC|DESC}〕〕…) 〔IN{RDエリア名 |(RDエリア名) |((RDエリア名)〔,(RDエリア名)〕…) |マトリクス分割インデクス格納用RDエリア指定}〕 〔インデクスオプション〕… マトリクス分割インデクス格納用RDエリア指定::=2次元格納用RDエリア指定 2次元格納用RDエリア指定::= (マトリクス分割用RDエリアリスト〔,マトリクス分割用RDエリアリスト〕…) マトリクス分割用RDエリアリスト::=(RDエリア名〔,RDエリア名〕…) インデクスオプション::={PCTFREE=未使用領域の比率 |UNBALANCED SPLIT |EMPTY |除外値指定} 除外値指定::=EXCEPT VALUES (NULL〔,NULL〕…) |
オペランド
インデクスを定義するキー値(インデクスとして定義する一つ,又は複数の列の全体の値)が,すべての行で異なっている場合に指定します。
UNIQUEを指定して,インデクス作成,又は更新時に重複キー値を検出した場合,HiRDBがエラーを返します。ただし,ナル値を含むキー値の場合,重複した値があっても重複キーにはなりません。
UNIQUEを指定する場合は次の点に注意してください。
表3-22 表を横分割する場合のUNIQUE指定可否
表の分割方法※1 | UNIQUEを指定しようとするインデクスの構成列※2 | インデクスの分割方法※4 | UNIQUE指定可否 | ||
---|---|---|---|---|---|
サーバ内の横分割 | キーレンジ分割(マトリクス分割以外),及びFIXハッシュ分割 | 分割キーインデクス | 表の分割数と一致 | ○ | |
表の分割数と不一致 | − | ||||
非分割キーインデクス | 分割キーを含む(順不同) | 表の分割数と一致 | ○ | ||
表の分割数と不一致(横分割しない) | ○ | ||||
分割キーを含まない(順不同) | 表の分割数と一致 | × | |||
表の分割数と不一致(横分割しない) | ○※3 | ||||
フレキシブルハッシュ分割 | 該当しない | 該当しない | × | ||
マトリクス分割 | 分割キーインデクス | 表の分割数と一致 | ○ | ||
表の分割数と不一致 | − | ||||
非分割キーインデクス | 分割キーをすべて含む場合(順不同) | 表の分割数と一致 | ○ | ||
表の分割数と不一致 | − | ||||
分割キーをすべて含まない場合(順不同) | 表の分割数と一致 | × | |||
表の分割数と不一致(横分割しない) | − | ||||
サーバ間の横分割(サーバ内分割なし) | キーレンジ分割(マトリクス分割以外),及びFIXハッシュ分割 | 分割キーインデクス | 表の分割数と一致 | ○ | |
表の分割数と不一致 | − | ||||
非分割キーインデクス | 分割キーをすべて含む場合(順不同) | 表の分割数と一致 | ○ | ||
表の分割数と不一致 | − | ||||
分割キーをすべて含まない場合(順不同) | 表の分割数と一致 | × | |||
表の分割数と不一致 | − | ||||
フレキシブルハッシュ分割 | 該当しない | 該当しない | × | ||
マトリクス分割 | 分割キーインデクス | 表の分割数と一致 | ○ | ||
表の分割数と不一致 | − | ||||
非分割キーインデクス | 分割キーをすべて含む場合(順不同) | 表の分割数と一致 | ○ | ||
表の分割数と不一致 | − | ||||
分割キーをすべて含まない場合(順不同) | 表の分割数と一致 | × | |||
表の分割数と不一致 | − | ||||
サーバ間の横分割(サーバ内分割あり) | キーレンジ分割(マトリクス分割以外),及びFIXハッシュ分割 | 分割キーインデクス | 表の分割数と一致 | ○ | |
表の分割数と不一致 | − | ||||
非分割キーインデクス | 分割キーをすべて含む場合(順不同) | 表の分割数と一致(サーバ内でも分割) | ○ | ||
表の分割数と不一致(サーバ内は非分割) | ○ | ||||
分割キーをすべて含まない場合(順不同) | 表の分割数と一致(サーバ内でも分割) | × | |||
表の分割数と不一致(サーバ内は非分割) | × | ||||
フレキシブルハッシュ分割 | 該当しない | 該当しない | × | ||
マトリクス分割 | 分割キーインデクス | 表の分割数と一致 | ○ | ||
表の分割数と不一致 | − | ||||
非分割キーインデクス | 分割キーをすべて含む場合(順不同) | 表の分割数と一致 | ○ | ||
表の分割数と不一致 | − | ||||
分割キーをすべて含まない場合(順不同) | 表の分割数と一致 | × | |||
表の分割数と不一致 | − |
認可識別子には,作成したインデクスを所有するユーザの認可識別子を指定します。
インデクス識別子には,定義するインデクスの名称を指定します。
表所有者が定義した自分の所有するインデクス内に同じ名称は指定できません。
認可識別子には,表を所有するユーザの認可識別子を指定します。
表識別子には,インデクスを作成する実表の名称を指定します。
インデクスを格納するRDエリアの名称を指定します。
マトリクス分割インデクス格納用RDエリア指定は,マトリクス分割表にインデクスを定義する場合に指定します。RDエリア名の規則については,マトリクス分割以外の表と同じです。
インデクスを格納するRDエリアについての規則を次に示します。
インデクス作成時のインデクスページ内の未使用領域の比率を指定します。未使用領域の比率は,0〜99(単位:%)を指定できます。省略すると,30%が仮定されます。
データベース作成ユティリティ及びデータベース再編成ユティリティでのインデクスの一括作成時に,未使用領域の比率でインデクスが作成されます。INSERT文やUPDATE文など,ほかの追加,及び更新ではPCTFREE=0が仮定されます。
インデクスを定義した後,行の追加が頻繁に発生する場合,未使用領域の比率を高く設定してください。
ページスプリットする場合,両ページに対するキーの振り分けを不均衡にします。
スプリット対象ページへのキーの追加位置が,ページの前半部の場合はスプリット後の左側のページの空きを多く確保し,後半部の場合は右側のページの空きを多く確保するように分割します。このようなインデクスをアンバランスインデクススプリットといいます。
アンバランスインデクススプリットについては,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。
未完状態のインデクスを作成する場合に指定します。
EMPTYを指定すると,インデクスを定義するときの同時実行性を向上させることができます。また,表の格納データが多く,複数のインデクスの定義を同時に実行する場合に効果があります。表にデータが格納されていない場合は効果がありません。
EMPTYオプションの使用方法については,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。
ナル値だけで構成されるキー値を除いて,インデクスを定義します。
非ナル値制約の列を含む場合には,除外値指定は指定できません。また,除外値指定を指定した場合,データベース再編成ユティリティでインデクス順にアンロードできません。
除外値を指定したインデクスの構成列に,繰返し列を含むことはできません。
共通規則
表3-23 インデクスを構成する列の長さ
データ型 | 各列の長さの合計が255バイト以下の場合 | 各列の長さの合計が256バイト以上の場合 | ||||
---|---|---|---|---|---|---|
単一列インデクスを構成する列 | 複数列インデクスを構成する列 | 単一列インデクスを構成する列 | 複数列インデクスを構成する列 | |||
構成列が固定長だけの場合 | 構成列に可変長を含む | 構成列が固定長だけの場合 | 構成列に可変長を含む | |||
INTEGER | 4 | 5 | 6 | − | 5 | 7 |
SMALLINT | 2 | 3 | 4 | − | 3 | 5 |
DECIMAL〔(m〔,n〕)〕 | ↓m÷2↓+1 | ↓m÷2↓+2 | ↓m÷2↓+3 | − | ↓m÷2↓+2 | ↓m÷2↓+4 |
FLOAT | 8 | − | − | − | − | − |
SMALLFLT | 4 | − | − | − | − | − |
CHAR(n),MCHAR(n) | n1 | n1+1 | n1+2 | n1 | n1+1 | n1+3 |
NCHAR(n) | 2×n2 | 2×n2+1 | 2×n2+2 | 2×n2 | 2×n2+1 | 2×n2+3 |
DATE | 4 | 5 | 6 | − | 5 | 7 |
TIME | 3 | 4 | 5 | − | 4 | 6 |
TIMESTAMP | 7+p÷2 | 8+p÷2 | 9+p÷2 | − | 8+p÷2 | 10+p÷2 |
INTERVAL YEAR TO DAY | 5 | 6 | 7 | − | 6 | 8 |
INTERVAL HOUR TO SECOND | 4 | 5 | 6 | − | 5 | 7 |
VARCHAR, MVARCHAR | n1+1 | − | n1+2 | n1+2 | − | n1+3 |
NVARCHAR | 2×n2+1 | − | 2×n2+2 | 2×n2+2 | − | 2×n2+3 |
留意事項
使用例
CREATE INDEX IDX1 ON ZAIKO(SCODE ASC) PCTFREE = 50
CREATE INDEX IDX2 ON ZAIKO(SNAME,COL) IN RDA1
CREATE INDEX IDX3 ON ZAIKO(SCODE) IN ((RDA1),(RDA2),(RDA3))
All Rights Reserved. Copyright (C) 2006, 2016, Hitachi, Ltd.