ヘッダーをスキップ
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド
リリース11.2.1
B56051-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

CREATE INDEX

CREATE INDEX文は、範囲索引またはビットマップ索引を表またはマテリアライズド・ビューの1つ以上の列に作成し、新しい索引に名前を割り当てます。

必要な権限

表またはマテリアライズド・ビューの所有者に必要な権限はありません。

別のユーザーの表またはマテリアライズド・ビューの場合、INDEXが必要です。

SQL構文

CREATE [UNIQUE|BITMAP] INDEX [Owner.]IndexName ON
[Owner.]TableName ({ColumnName [ASC | DESC]}
[, ... ] )

パラメータ

CREATE INDEX文には、次のパラメータがあります。

パラメータ 説明
UNIQUE 索引の重複を禁止します。 UNIQUEを指定すると、索引キーの列値の各組合せは、その表の1行にのみ指定できます。 UNIQUEを省略すると、値を重複させることができます。 一意索引を作成する場合、既存のすべての索引付きの列の値は一意である必要があります。 UNIQUEを指定すると、TimesTenでは範囲索引が作成されます。

範囲索引の特徴は次のとおりです。

  • 範囲検索を高速化します(有効な等価検索にも使用できます)

  • インメモリーのデータ管理に最適化されています

  • 列の値に基づく効果的なソート処理が可能です

BITMAP 一意の値を持つ行に関する情報がビットマップでエンコードされている索引を作成するには、CREATE BITMAP INDEXを指定します。 ビットマップの各ビットは、表の行に対応します。

ビットマップ索引は、一意の値が多くない列に使用します。

[Owner.] IndexName 新しい索引に割り当てる名前。表の2つの索引に同じ名前を付けることはできません。所有者を指定する場合、表の所有者と同じ名前を指定する必要があります。
[Owner.] TableName 索引を作成する表またはマテリアライズド・ビューを指定します。
ColumnName 索引キーとして使用する列の名前。主索引キーから補助索引キーの順に、最大16列を指定できます。
[ASC|DESC] 索引の順序を昇順(デフォルト)または降順で指定します。現在、TimesTenではこのパラメータは無視されます。

説明

表を作成し、次に表でビットマップ索引を作成します。 ttIsql SHOWPLANコマンドを使用して、ビットマップ索引が問合せで使用されていることを確認します。

Command> CREATE TABLE tab1 (id NUMBER);
Command> INSERT INTO tab1 VALUES (10);
1 row inserted.
Command> INSERT INTO tab1 VALUES (20);
1 row inserted.
Command> CREATE BITMAP INDEX bitmap_id ON tab1 (id);
Command> COMMIT;
Command> SET AUTOCOMMIT OFF;
Command> SHOWPLAN 1;
Command> SELECT * FROM tab1 WHERE id = 10;

Query Optimizer Plan:

  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkBitmapScan
  TBLNAME:             TAB1
  IXNAME:              BITMAP_ID
  INDEXED CONDITION:   TAB1.ID = 10
  NOT INDEXED:         <NULL>

< 10 >
1 row found.

HRスキーマのregions表により、region_idに一意の索引が作成されます。 regions表に対してttIsql INDEXESコマンドを発行します。 一意の範囲索引regionsが表示されます。

Command> INDEXES REGIONS;

Indexes on table SAMPLEUSER.REGIONS:
  REGIONS: unique range index on columns:
    REGION_ID
    (referenced by foreign key index COUNTR_REG_FK on table SAMPLEUSER.COUNTRIES)
  1 index found.

1 table found.

regions表に一意の索引iを作成し、region_id列に索引を作成してみます。 警告メッセージが表示されます。

Command> CREATE UNIQUE INDEX i ON regions (region_id);
Warning  2232: New index I is identical to existing index REGIONS; consider dropping index I

ttRedundantIndexCheckをコールして、この索引に対する警告メッセージを表示します。

Command> CALL ttRedundantIndexCheck ('regions');
< Index SAMPLEUSER.REGIONS.I is identical to index SAMPLEUSER.REGIONS.REGIONS; consider dropping index SAMPLEUSER.REGIONS.I >
1 row found.

redundancy表を作成し、col1列およびcol2列を定義します。 col1およびcol2に2つのユーザー索引を作成します。 2つ目の索引r2を作成しようとするとエラー・メッセージが表示されます。 索引r1は作成されます。 索引r2は作成されません。

Command> CREATE TABLE redundancy (col1 CHAR (30), col2 VARCHAR2 (30));
Command> CREATE INDEX r1 ON redundancy (col1, col2);
Command> CREATE INDEX r2 ON redundancy (col1, col2);
 2231: New index R2 would be identical to existing index R1
The command failed.

redundancy表に対してttIsqlコマンドのINDEXESを発行し、索引r1のみが作成されていることを表示します。

Command> INDEXES redundancy;

Indexes on table SAMPLEUSER.REDUNDANCY:
  R1: non-unique range index on columns:
    COL1
    COL2
  1 index found.

1 table found.

この一意索引によって、部品の番号はすべて一意になります。

CREATE UNIQUE INDEX purchasing.partnumindex
ON purchasing.parts (partnumber);

employees1表に、german_indexという名前の言語索引を作成します。2つ以上の言語ソートが必要な場合は、2つ目の言語索引を作成します。

Command> CREATE TABLE employees1 (id CHARACTER (21),
id2 character (21));
Command> CREATE INDEX german_index ON employees1
  (NLSSORT(id, 'NLS_SORT=GERMAN'));
Command> CREATE INDEX german_index2 ON employees1
  NLSSORT(id2, 'nls_sort=german_ci'));
Command> indexes employees1;
Indexes on table SAMPLEUSER.EMPLOYEES1:
  GERMAN_INDEX: non-unique range index on columns:
    NLSSORT(ID,'NLS_SORT=GERMAN')
  GERMAN_INDEX2: non-unique range index on columns:
    NLSSORT(ID2,'nls_sort=german_ci')
  2 indexes found.
1 table found.

関連項目

「DROP INDEX」