本記事では、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 列に基づいて昇順でソートされ、NULL値は非NULL値の後に表示されるよう指定します。実行例は以下のとおりです:
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;