本記事では、OceanBaseデータベースのOracleモードにおける簡単なインデックス操作について説明します。これには、インデックスの作成、追加、確認、削除、および名前の変更が含まれます。
インデックスの作成/追加
インデックスを作成または追加する構文は以下のとおりです:
CREATE [UNIQUE] INDEX index_name
[USING BTREE] ON table_name (sort_column_key [, sort_column_key...])
[index_option...] [partition_option];
関連パラメータの説明は以下のとおりです:
index_name:作成するインデックスの名前を指定します。table_name:インデックスを作成するテーブルの名前を指定します。sort_column_key:ソート列のキーを指定します。インデックス作成時に複数のソート列を指定でき、複数のソート列は英語のカンマ(,)で区切ります。index_option:インデックスオプションを指定します。インデックス作成時に複数のインデックスオプションを指定でき、複数のインデックスオプションは英語のスペースで区切ります。partition_option:インデックス作成パーティションのオプションを指定します。
詳細な構文については、CREATE INDEXを参照してください。
特定のテーブルのインデックスを作成する際、そのテーブルは引き続き読み取りや書き込み操作に使用できます。
ここでは、データベース内に既にテーブル t1 が存在し、t1 テーブルに index1 という名前のインデックスを作成し、そのインデックスが c1 列に基づいて昇順でソートされるように指定します。また、空値がソート結果において非空値の後に表示されるように指定します。実行例は以下のとおりです:
obclient> CREATE INDEX index1 ON t1 (c1 ASC NULLS LAST);
インデックスの確認
システムビューを使用してインデックスを確認できます。インデックスに関連するビューは以下のとおりです:
USER_INDEXES:ユーザーが所有するすべてのテーブルのインデックス情報を確認するために使用されます。詳細については、USER_INDEXESを参照してください。
ALL_INDEXES:テーブルのすべてのインデックスを確認するために使用されます。詳細については、ALL_INDEXESを参照してください。
DBA_INDEXES:データベース内のすべてのテーブルのインデックス情報を確認するために使用されます。詳細については、DBA_INDEXESを参照してください。
ALL_IND_COLUMNS:ユーザーがアクセス可能なすべてのテーブルのインデックス列情報を確認するために使用されます。詳細については、ALL_IND_COLUMNSを参照してください。
DBA_IND_COLUMNS:データベース内のすべてのテーブルのインデックス列情報を確認するために使用されます。詳細については、DBA_IND_COLUMNSを参照してください。
USER_IND_COLUMNS:テーブルのインデックスの詳細情報を確認するために使用されます。詳細については、USER_IND_COLUMNSを参照してください。
異なる状況に応じて、異なるビューを確認できます。ここでは、テーブルt1のインデックスの詳細情報を確認する方法を例に説明します。
obclient> SELECT * FROM USER_IND_COLUMNS WHERE table_name='T1';
出力は次のとおりです:
+--------------------------+------------+-------------+-----------------+---------------+-------------+---------+--------------------+
| INDEX_NAME | TABLE_NAME | COLUMN_NAME | COLUMN_POSITION | COLUMN_LENGTH | CHAR_LENGTH | DESCEND | COLLATED_COLUMN_ID |
+--------------------------+------------+-------------+-----------------+---------------+-------------+---------+--------------------+
| INDEX1 | T1 | C1 | 1 | 50 | 50 | ASC | NULL |
+--------------------------+------------+-------------+-----------------+---------------+-------------+---------+--------------------+
出力情報の説明は以下のとおりです:
INDEX_NAME:インデックス名。TABLE_NAME:インデックスが存在するテーブル名。COLUMN_NAME:インデックスが存在する列の名前。COLUMN_POSITION:インデックス内のインデックス列の位置。COLUMN_LENGTH:インデックス列の長さ。CHAR_LENGTH:インデックス列の文字長。DESCEND:インデックス列の並べ替え方式。
インデックスの削除
インデックスを削除する構文は以下のとおりです:
DROP INDEX [schema.]index_name;
詳細な構文については、DROP INDEXを参照してください。
特定のテーブルのインデックスを削除しても、そのテーブルは読み取りおよび書き込み操作に引き続き使用できます。
ここでは、データベース内に既にテーブル t1 が存在し、テーブル t1 に index1 インデックスが存在する場合を想定します。インデックスを削除する例は以下のとおりです:
obclient> DROP INDEX index1;
インデックスの名前変更
インデックスの名前を変更する構文は以下のとおりです:
ALTER INDEX [ schema.]index_name RENAME TO new_name;
関連パラメータの説明は以下のとおりです:
index_name:名前を変更するインデックスのインデックス名を指定します。new_name:名前変更後のインデックスのインデックス名を指定します。
詳細な構文については、ALTER INDEXを参照してください。
データベース内にインデックス index1 が存在し、それを index2 に名前変更する例は以下のとおりです:
obclient> ALTER INDEX index1 RENAME TO index2;