#### 23.6.14.25 ndbinfo 字典\_对象\_树表

[](<>)

这`dict_obj_tree`table 提供了一个基于树的表信息视图[`dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)桌子。这主要用于测试，但可用于可视化`新开发银行`数据库对象。

这`dict_obj_tree`表包含以下列：

-   `类型`

    类型[`信息和通信技术`](https://dev.mysql.com/doc/ndb-internals/en/ndb-internals-kernel-blocks-dbdict.html)目的;加入[`dict_obj_types`](mysql-cluster-ndbinfo-dict-obj-types.html)获取对象类型的名称

-   `id`

    对象标识符；一样的`id`列在[`dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)

    对于 Disk Data undo log files 和 data files，这与显示的值相同`LOGFILE_GROUP_NUMBER`的列[`INFORMATION_SCHEMA.FILES`](information-schema-files-table.html)桌子;对于撤消日志文件，它也与显示的值相同`log_id`ndbinfo 中的列[`日志缓冲区`](mysql-cluster-ndbinfo-logbuffers.html)和[`日志空间`](mysql-cluster-ndbinfo-logspaces.html)表

-   `姓名`

    对象的完全限定名；一样的`fq_name`列在[`dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)

    对于一张桌子，这是`*`数据库*姓名`*/定义/*`表名`*`（与其相同*`父母名字`*);对于任何类型的索引，它采用 \`NDB$INDEX 的形式**`index_id`*\_自定义\`

-   `父类型`

    这*`信息和通信技术`*此对象的父对象的对象类型；加入[`dict_obj_types`](mysql-cluster-ndbinfo-dict-obj-types.html)获取对象类型的名称

-   `parent_id`

    此对象的父对象的标识符；一样的[`dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)表的`id`柱子

-   `父母名字`

    此对象的父对象的完全限定名称；一样的[`dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)表的`fq_name`柱子

    对于一个表，它的形式是`*`数据库名称`*/定义/*`表名`*`.对于索引，名称是`系统/定义/*`table_id`*/*`索引名称`*`.对于主键，它是`系统/定义/*`table_id`*/基本的`，对于一个唯一的键，它是`系统/定义/*`table_id`*/*`uk_name`*$唯一`

-   `根类型`

    这*`信息和通信技术`*根对象的对象类型；加入[`dict_obj_types`](mysql-cluster-ndbinfo-dict-obj-types.html)获取对象类型的名称

-   `root_id`

    根对象的标识符；一样的[`dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)表的`id`柱子

-   `根名称`

    根对象的完全限定名；一样的[`dict_obj_info`](mysql-cluster-ndbinfo-dict-obj-info.html)表的`fq_name`柱子

-   `等级`

    层次结构中对象的级别

-   `小路`

    中对象的完整路径*`新开发银行`*对象层次结构；对象由右箭头分隔（表示为`->`)，从左边的根对象开始

-   `indented_name`

    这`姓名`以右箭头为前缀（表示为`->`) 前面有许多空格，这些空格对应于对象在层次结构中的深度

    这`小路`列对于获取给定的完整路径很有用`新开发银行`数据库对象在一行中，而`indented_name`column 可用于获取所需对象的完整层次结构信息的树状布局。

*例子*: 假设存在`测试`数据库并且没有现有的表命名`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`表及其所有相关对象，执行类似于此的查询，选择每个对象的缩进名称`测试/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.html)然后查询[`INFORMATION_SCHEMA.FILES`](information-schema-files-table.html)，或类似的方式，如下所示：

```
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)
```

这`dict_obj_tree`表是在 NDB 8.0.24 中添加的。
