インデックス名が取得できた場合は、ビュー 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';