文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (美国信纸) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


25.6.17.26 ndbinfo dict_obj_tree 表

dict_obj_tree 提供了 dict_obj_info 表中表信息的树形视图。这主要用于测试,但对于可视化 NDB 数据库对象的层次结构很有用。

dict_obj_tree 包含以下列

  • type

    类型DICT 对象;与 dict_obj_types 联接以获取对象类型的名称

  • id

    对象标识符;与 dict_obj_info 中的 id 列相同

    对于磁盘数据撤消日志文件和数据文件,这与信息模式 FILES 表的 LOGFILE_GROUP_NUMBER 列中显示的值相同;对于撤消日志文件,它也与 ndbinfo logbufferslogspaces 表的 log_id 列中显示的值相同

  • name

    对象的完全限定名称;与 dict_obj_info 中的 fq_name 列相同

    对于表,它是 database_name/def/table_name(与其 parent_name 相同);对于任何类型的索引,它采用 NDB$INDEX_index_id_CUSTOM 的形式

  • parent_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/PRIMARY,对于唯一键,它是 sys/def/table_id/uk_name$unique

  • root_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)