dict_obj_tree
表提供了 dict_obj_info
表中表信息的树形视图。这主要用于测试,但可以用于可视化 NDB
数据库对象的层次结构。
dict_obj_tree
表包含以下列
type
DICT
对象类型;连接到dict_obj_types
以获取对象类型的名称id
对象标识符;与
dict_obj_info
中的id
列相同对于磁盘数据撤消日志文件和数据文件,这与信息模式
FILES
表的LOGFILE_GROUP_NUMBER
列中显示的值相同;对于撤消日志文件,它也与 ndbinfologbuffers
和logspaces
表的log_id
列中显示的值相同name
对象的完全限定名;与
dict_obj_info
中的fq_name
列相同对于表,它是
(与其database_name
/def/table_name
parent_name
相同);对于任何类型的索引,它采用以下形式NDB$INDEX_
index_id
_CUSTOMparent_type
此对象父对象的
DICT
对象类型;连接到dict_obj_types
以获取对象类型的名称parent_id
此对象父对象的标识符;与
dict_obj_info
表的id
列相同parent_name
此对象父对象的完全限定名;与
dict_obj_info
表的fq_name
列相同对于表,它采用以下形式
。对于索引,名称为database_name
/def/table_name
sys/def/
。对于主键,它是table_id
/index_name
sys/def/
,对于唯一键,它是table_id
/PRIMARYsys/def/
table_id
/uk_name
$uniqueroot_type
根对象的
DICT
对象类型;连接到dict_obj_types
以获取对象类型的名称root_id
根对象的标识符;与
dict_obj_info
表的id
列相同root_name
根对象的完全限定名;与
dict_obj_info
表的fq_name
列相同level
层次结构中对象的级别
path
NDB
对象层次结构中对象的完整路径;对象以右箭头(表示为->
)分隔,从左侧的根对象开始indented_name
在
name
前缀添加一个右箭头(表示为->
),前面有与对象在层次结构中的深度相对应的空格数
path
列可用于在一行中获取给定 NDB
数据库对象的完整路径,而 indented_name
列可用于获取所需对象的完整层次结构信息的树形布局。
示例:假设存在一个 test
数据库,并且在该数据库中不存在名为 t1
的现有表,则执行以下 SQL 语句
CREATE TABLE test.t1 (
a INT PRIMARY KEY,
b INT,
UNIQUE KEY(b)
) ENGINE = NDB;
您可以使用此处显示的查询获取新创建表的路径
mysql> SELECT path FROM ndbinfo.dict_obj_tree
-> WHERE name LIKE 'test%t1';
+-------------+
| path |
+-------------+
| test/def/t1 |
+-------------+
1 row in set (0.14 sec)
您可以使用表的路径作为根名称,通过类似于此查询的方式查看该表的依赖对象路径
mysql> SELECT path FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/t1';
+----------------------------------------------------------+
| path |
+----------------------------------------------------------+
| test/def/t1 |
| test/def/t1 -> sys/def/13/b |
| test/def/t1 -> sys/def/13/b -> NDB$INDEX_15_CUSTOM |
| test/def/t1 -> sys/def/13/b$unique |
| test/def/t1 -> sys/def/13/b$unique -> NDB$INDEX_16_UI |
| test/def/t1 -> sys/def/13/PRIMARY |
| test/def/t1 -> sys/def/13/PRIMARY -> NDB$INDEX_14_CUSTOM |
+----------------------------------------------------------+
7 rows in set (0.16 sec)
若要获取 t1
表及其所有依赖对象的层次结构视图,请执行类似于此查询的查询,该查询选择每个对象的缩进名称,其根对象名称为 test/def/t1
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/t1';
+----------------------------+
| indented_name |
+----------------------------+
| test/def/t1 |
| -> sys/def/13/b |
| -> NDB$INDEX_15_CUSTOM |
| -> sys/def/13/b$unique |
| -> NDB$INDEX_16_UI |
| -> sys/def/13/PRIMARY |
| -> NDB$INDEX_14_CUSTOM |
+----------------------------+
7 rows in set (0.15 sec)
在使用磁盘数据表时,请注意,在此上下文中,表空间或日志文件组被视为根对象。这意味着您必须知道与给定表关联的任何表空间或日志文件组的名称,或者从 SHOW CREATE TABLE
中获取此信息,然后查询 INFORMATION_SCHEMA.FILES
或类似方法,如下所示
mysql> SHOW CREATE TABLE test.dt_1\G
*************************** 1. row ***************************
Table: dt_1
Create Table: CREATE TABLE `dt_1` (
`member_id` int unsigned NOT NULL AUTO_INCREMENT,
`last_name` varchar(50) NOT NULL,
`first_name` varchar(50) NOT NULL,
`dob` date NOT NULL,
`joined` date NOT NULL,
PRIMARY KEY (`member_id`),
KEY `last_name` (`last_name`,`first_name`)
) /*!50100 TABLESPACE `ts_1` STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> SELECT DISTINCT TABLESPACE_NAME, LOGFILE_GROUP_NAME
-> FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='ts_1';
+-----------------+--------------------+
| TABLESPACE_NAME | LOGFILE_GROUP_NAME |
+-----------------+--------------------+
| ts_1 | lg_1 |
+-----------------+--------------------+
1 row in set (0.00 sec)
现在,您可以获取表、表空间和日志文件组的层次结构信息,如下所示
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/dt_1';
+----------------------------+
| indented_name |
+----------------------------+
| test/def/dt_1 |
| -> sys/def/23/last_name |
| -> NDB$INDEX_25_CUSTOM |
| -> sys/def/23/PRIMARY |
| -> NDB$INDEX_24_CUSTOM |
+----------------------------+
5 rows in set (0.15 sec)
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'ts_1';
+-----------------+
| indented_name |
+-----------------+
| ts_1 |
| -> data_1.dat |
| -> data_2.dat |
+-----------------+
3 rows in set (0.17 sec)
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name LIKE 'lg_1';
+-----------------+
| indented_name |
+-----------------+
| lg_1 |
| -> undo_1.log |
| -> undo_2.log |
+-----------------+
3 rows in set (0.16 sec)