首批通过分布式安全可靠测评,为关键业务系统打造
查询索引实体表
更新时间:2026-05-22 08:56
在 OceanBase 数据库中,索引表与普通数据表一样都是实体表,OceanBase 数据库在更新数据表时会先更新索引表(索引实体表),然后再更新数据表。用户租户下可使用多种方式查看已创建用户表的索引。
然而在部分运维场景或者问题诊断场景中,需要深入查询索引对应实体表的各类详细信息(如索引表的 table_id 等),本文简要介绍如何通过 __all_virtual_table 查询索引实体表相关信息。
操作方法
MySQL 租户下创建包含索引的用户表。
obclient > CREATE TABLE index_table ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, age int(11) NOT NULL, email varchar(50) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY email (email), KEY name_age (name, age)); Query OK, 0 rows affected (0.049 sec)sys 租户下查看该表信息。
obclient > select tenant_id, table_name,table_id,database_id,table_type from __all_virtual_table where tenant_id=1029 and table_name='index_table';输出结果如下:
+-----------+-------------+------------------+------------------+------------+ | tenant_id | table_name | table_id | database_id| table_type | +-----------+-------------+------------------+------------------+------------+ | 1029 | index_table | 1131397465031516 | 1131397464982555 | 3 | +-----------+-------------+------------------+------------------+------------+sys 租户下查询该表的索引表信息(不包含 primary key )。
obclient> select table_id,database_id,table_name,table_type, case index_type WHEN 0 THEN 'not index table' WHEN 1 THEN 'local index' WHEN 2 THEN 'unique local index' WHEN 3 THEN 'global index' WHEN 4 THEN 'unique global index' WHEN 7 THEN 'NORMAL_GLOBAL_LOCAL_STORAGE' WHEN 8 THEN 'UNIQUE_GLOBAL_LOCAL_STORAGE' end as index_type, case index_status WHEN 1 THEN 'unavailable' WHEN 2 THEN 'available' end as index_status, index_column_num,data_table_id from __all_virtual_table where data_table_id=1131397465031516;输出结果如下:
+------------------+------------------+---------------------------------+------------+--------------------+--------------+------------------+------------------+ | table_id | database_id | table_name | table_type | index_type | index_status | index_column_num | data_table_id | +------------------+------------------+---------------------------------+------------+--------------------+--------------+------------------+------------------+ | 1131397465031517 | 1131397464982555 |__idx_1131397465031516_email | 5 | unique local index | available | 1 | 1131397465031516 | | 1131397465031518 | 1131397464982555 | __idx_1131397465031516_name_age | 5 | local index | available | 2 | 1131397465031516 | +------------------+------------------+---------------------------------+------------+--------------------+--------------+------------------+------------------+
在内部表 __all_virual_table 中,当查询结果中的 table_name 以 "_idx" 开头时(通常为 __idx + 主表table_id + 索引名),通常表示该查表为某个用户表对应的索引表,此时 table_type 字段的值应该为5(系统表:0,系统视图:1,虚拟表:2,用户表:3,用户视图:4,索引表:5,临时表:6,物化视图:7,会话级别 oracle 兼容模式下的临时表:8,事务级别 oracle 兼容模式下的临时表:9),data_table_id 字段为该索引表对应的用户数据表的 table_id,因此可以利用该字段查询索引表的信息。data_table_id 的值就是主表 ID 的值。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。