information-schema-tables-table.md 9.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
### 26.3.38 信息\_模式表表

[](<>)

[`表格`](information-schema-tables-table.html)table 提供有关数据库中表的信息。

中的列[`表格`](information-schema-tables-table.html)表示表统计信息的值保存缓存值。这[`information_schema_stats_expiry`](server-system-variables.html#sysvar_information_schema_stats_expiry)系统变量定义缓存表统计信息过期之前的时间段。默认值为 86400 秒(24 小时)。如果没有缓存统计信息或统计信息已过期,则在查询表统计信息列时从存储引擎中检索统计信息。要随时更新给定表的缓存值,请使用[`分析表`](analyze-table.html).要始终直接从存储引擎中检索最新的统计信息,请设置[`information_schema_stats_expiry`](server-system-variables.html#sysvar_information_schema_stats_expiry)`0`.有关详细信息,请参阅[第 8.2.3 节,“优化信息\_SCHEMA 查询”](information-schema-optimization.html).

笔记

如果[`innodb_read_only`](innodb-parameters.html#sysvar_innodb_read_only)系统变量已启用,[`分析表`](analyze-table.html)可能会失败,因为它无法更新数据字典中的统计表,这些表使用`InnoDB`.为了[`分析表`](analyze-table.html)更新密钥分布的操作,即使该操作更新了表本身(例如,如果它是`MyISAM`桌子)。要获取更新的分布统计信息,请设置[`information_schema_stats_expiry=0`](server-system-variables.html#sysvar_information_schema_stats_expiry).

[`表格`](information-schema-tables-table.html)表有这些列:

-   `表目录`

    表所属目录的名称。这个值总是`定义`.

-   `TABLE_SCHEMA`

    表所属的架构(数据库)的名称。

-   `TABLE_NAME`

    表的名称。

-   `TABLE_TYPE`

    `基表`对于一张桌子,`看法`观看,或`系统视图`为`INFORMATION_SCHEMA`桌子。

    这[`表格`](information-schema-tables-table.html)表未列出`暂时的`表。

-   `引擎`

    表的存储引擎。看[第 15 章,*InnoDB 存储引擎*](innodb-storage-engine.html), 和[第 16 章,*替代存储引擎*](storage-engines.html).

    对于分区表,`引擎`显示所有分区使用的存储引擎的名称。

-   `版本`

    此列未使用。随着去除`.frm`MySQL 8.0 中的文件,此列现在报告硬编码值`10`, 这是最后一个`.frm`MySQL 5.7 中使用的文件版本。

-   `ROW_FORMAT`

    行存储格式(`固定的`,`动态的`,`压缩`,`多余的`,`袖珍的`)。为了`MyISAM`表,`动态的`对应于什么[**myisamchk -dvv**](myisamchk.html)报告为`包装好的`.

-   `TABLE_ROWS`

    行数。一些存储引擎,例如`MyISAM`,存储确切的计数。对于其他存储引擎,例如`InnoDB`,这个值是一个近似值,可能与实际值相差 40% 到 50%。在这种情况下,使用`选择计数(*)`以获得准确的计数。

    `TABLE_ROWS`是`空值`为了`INFORMATION_SCHEMA`表。

    为了[`InnoDB`](innodb-storage-engine.html)表中,行数只是 SQL 优化中使用的粗略估计。(如果[`InnoDB`](innodb-storage-engine.html)表已分区。)

-   `AVG_ROW_LENGTH`

    平均行长。

-   `DATA_LENGTH`

    为了`MyISAM`,`DATA_LENGTH`是数据文件的长度,以字节为单位。

    为了`InnoDB`,`DATA_LENGTH`是为聚集索引分配的近似空间量,以字节为单位。具体来说,它是聚集索引大小(以页为单位)乘以`InnoDB`页面大小。

    有关其他存储引擎的信息,请参阅本节末尾的注释。

-   `MAX_DATA_LENGTH`

    为了`MyISAM`,`MAX_DATA_LENGTH`是数据文件的最大长度。给定使用的数据指针大小,这是可以存储在表中的数据总字节数。

    未用于`InnoDB`.

    有关其他存储引擎的信息,请参阅本节末尾的注释。

-   `INDEX_LENGTH`

    为了`MyISAM`,`INDEX_LENGTH`是索引文件的长度,以字节为单位。

    为了`InnoDB`,`INDEX_LENGTH`是为非聚集索引分配的近似空间量,以字节为单位。具体来说,它是非聚集索引大小的总和,以页为单位,乘以`InnoDB`页面大小。

    有关其他存储引擎的信息,请参阅本节末尾的注释。

-   `DATA_FREE`

    已分配但未使用的字节数。

    `InnoDB`tables 报告该表所属的表空间的可用空间。对于位于共享表空间中的表,这是共享表空间的空闲空间。如果您使用多个表空间并且该表有自己的表空间,则可用空间仅用于该表。空闲空间是指完全空闲范围中的字节数减去安全裕度。即使可用空间显示为 0,只要不需要分配新的扩展区,就可以插入行。

    对于 NDB 集群,`DATA_FREE`显示在磁盘上分配给磁盘数据表或磁盘碎片但未被使用的空间。(内存数据资源使用情况由`DATA_LENGTH`柱子。)

    对于分区表,这个值只是一个估计值,可能不是绝对正确的。在这种情况下获取此信息的更准确方法是查询`INFORMATION_SCHEMA` [`分区`](information-schema-partitions-table.html)表,如本例所示:

    ```
    SELECT SUM(DATA_FREE)
        FROM  INFORMATION_SCHEMA.PARTITIONS
        WHERE TABLE_SCHEMA = 'mydb'
        AND   TABLE_NAME   = 'mytable';
    ```

    有关详细信息,请参阅[第 26.3.21 节,“信息\_SCHEMA 分区表”](information-schema-partitions-table.html).

-   `自动递增`

    下一个`自动递增`价值。

-   `CREATE_TIME`

    创建表的时间。

-   `更新时间`

    上次更新数据文件的时间。对于某些存储引擎,此值为`空值`.例如,`InnoDB`在其存储多个表[系统表空间](glossary.html#glos_system_tablespace)并且数据文件时间戳不适用。即使[每表文件](glossary.html#glos_file_per_table)模式与每个`InnoDB`单独的表`.ibd`文件,[变化缓冲](glossary.html#glos_change_buffering)可以延迟写入数据文件,因此文件修改时间与上次插入、更新或删除的时间不同。为了`MyISAM`,使用数据文件时间戳;但是,在 Windows 上,时间戳不会被更新更新,因此该值不准确。

    `更新时间`显示最后一个时间戳值[`更新`](update.html),[`插入`](insert.html), 要么[`删除`](delete.html)执行于`InnoDB`未分区的表。对于 MVCC,时间戳值反映了[`犯罪`](commit.html)时间,这被认为是最后一次更新时间。重新启动服务器或将表从`InnoDB`数据字典缓存。

-   `CHECK_TIME`

    上次检查表的时间。这次不是所有的存储引擎都会更新,这种情况下,值总是`空值`.

    对于分区[`InnoDB`](innodb-storage-engine.html)表,`CHECK_TIME`总是`空值`.

-   `TABLE_COLLATION`

    表默认排序规则。输出没有明确列出表默认字符集,但排序规则名称以字符集名称开头。

-   `校验和`

    实时校验和值(如果有)。

-   `CREATE_OPTIONS`

    使用的额外选项[`创建表`](create-table.html).

    `CREATE_OPTIONS`节目`分区的`对于分区表。

    在 MySQL 8.0.16 之前,`CREATE_OPTIONS`显示`加密`为在 file-per-table 表空间中创建的表指定的子句。从 MySQL 8.0.16 开始,如果 table 已加密或指定的加密与 schema 加密不同,它会显示 file-per-table 表空间的加密子句。对于在通用表空间中创建的表,未显示加密子句。要识别每个表的加密文件和通用表空间,请查询[`INNODB_TABLESPACES`](information-schema-innodb-tablespaces-table.html) `加密`柱子。

    当创建一个表时[严格模式](glossary.html#glos_strict_mode)禁用,如果不支持指定的行格式,则使用存储引擎的默认行格式。表格的实际行格式报告在`ROW_FORMAT`柱子。`CREATE_OPTIONS`显示在[`创建表`](create-table.html)陈述。

    更改表的存储引擎时,不适用于新存储引擎的表选项将保留在表定义中,以便在必要时将具有先前定义的选项的表恢复为原始存储引擎。这`CREATE_OPTIONS`列可能会显示保留的选项。

-   `TABLE_COMMENT`

    创建表时使用的注释(或有关 MySQL 为何无法访问表信息的信息)。

#### 笔记

-   为了[`新开发银行`](mysql-cluster.html)表,此语句的输出显示适当的值`AVG_ROW_LENGTH``DATA_LENGTH`列,除了[`斑点`](blob.html)不考虑列。

-   为了[`新开发银行`](mysql-cluster.html)表,`DATA_LENGTH`仅包括存储在主存储器中的数据;这`MAX_DATA_LENGTH``DATA_FREE`列适用于磁盘数据。

-   对于 NDB Cluster 磁盘数据表,`MAX_DATA_LENGTH`显示为磁盘数据表或片段的磁盘部分分配的空间。(内存数据资源使用情况由`DATA_LENGTH`柱子。)

-   为了`记忆``DATA_LENGTH`,`MAX_DATA_LENGTH`, 和`INDEX_LENGTH`值近似于实际分配的内存量。分配算法会大量保留内存以减少分配操作的次数。

-   对于视图,大多数[`表格`](information-schema-tables-table.html)列为 0 或`空值`除了那个`TABLE_NAME`表示视图名称,`CREATE_TIME`表示创建时间,并且`TABLE_COMMENT``看法`.

    表格信息也可从[`显示表状态`](show-table-status.html)和[`显示表格`](show-tables.html)陈述。看[第 13.7.7.38 节,“SHOW TABLE STATUS 语句”](show-table-status.html), 和[第 13.7.7.39 节,“SHOW TABLES 语句”](show-tables.html).以下语句是等效的:


```
SELECT
    TABLE_NAME, ENGINE, VERSION, ROW_FORMAT, TABLE_ROWS, AVG_ROW_LENGTH,
    DATA_LENGTH, MAX_DATA_LENGTH, INDEX_LENGTH, DATA_FREE, AUTO_INCREMENT,
    CREATE_TIME, UPDATE_TIME, CHECK_TIME, TABLE_COLLATION, CHECKSUM,
    CREATE_OPTIONS, TABLE_COMMENT
  FROM INFORMATION_SCHEMA.TABLES
  WHERE table_schema = 'db_name'
  [AND table_name LIKE 'wild']

SHOW TABLE STATUS
  FROM db_name
  [LIKE 'wild']
```

以下语句是等效的:

```
SELECT
  TABLE_NAME, TABLE_TYPE
  FROM INFORMATION_SCHEMA.TABLES
  WHERE table_schema = 'db_name'
  [AND table_name LIKE 'wild']

SHOW FULL TABLES
  FROM db_name
  [LIKE 'wild']
```