インデックス名が取得できた場合は、ビューCDB_INDEXES(システムテナント)、information_schema.statistics(MySQLユーザーテナント)またはDBA_INDEXES/ALL_INDEXES/USER_INDEXES(Oracleユーザーテナント)に直接アクセスし、インデックス名から対応する主表情報を取得することもできます。方法は以下のとおりです:
説明
CDB_INDEXES、information_schema.statistics、DBA_INDEXES、ALL_INDEXES、USER_INDEXESなどのビューでは、フィールドCON_IDはすべてテナントIDを表します。
システムテナント
システムテナントでは、以下のステートメントを使用してクエリを実行できます。
SELECT CON_ID, TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM oceanbase.CDB_INDEXES WHERE CON_ID=tenant_id AND INDEX_NAME='index_name';例えば、
tenant_idが1002のテナント内のあるインデックスの名前がtbl2_f_rl_idx1であると仮定した場合、システムテナントでそのインデックスに対応する主表を照会するステートメントは次のとおりです。obclient> SELECT CON_ID, TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM oceanbase.CDB_INDEXES WHERE CON_ID=1002 AND INDEX_NAME='tbl2_f_rl_idx1';クエリ結果は次のとおりです:
+--------+-------------+------------+----------------+ | CON_ID | TABLE_OWNER | TABLE_NAME | INDEX_NAME | +--------+-------------+------------+----------------+ | 1002 | infotest | tbl2_f_rl | tbl2_f_rl_idx1 | +--------+-------------+------------+----------------+ 1 row in setユーザーテナント
MySQLモードのユーザーテナントでは、以下のステートメントを使用してクエリを実行できます。
obclient> SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_SCHEMA, INDEX_NAME FROM information_schema.statistics WHERE INDEX_NAME='index_name';Oracleモードのユーザーテナントでは、以下のステートメントを使用してクエリを実行できます。
obclient> SELECT CON_ID, TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM SYS.DBA_INDEXES WHERE INDEX_NAME='index_name';obclient> SELECT CON_ID, TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM SYS.ALL_INDEXES WHERE INDEX_NAME='index_name';obclient> SELECT CON_ID, TABLE_OWNER, TABLE_NAME, INDEX_NAME FROM SYS.USER_INDEXES WHERE INDEX_NAME='index_name';