26.38 INFORMATION_SCHEMA TABLES 表
发布日期:2021-05-08 00:27:33 浏览次数:30 分类:精选文章

本文共 2520 字,大约阅读时间需要 8 分钟。

information_schema.TABLES 表用于获取数据库表的统计信息。该表中的每一列都提供了不同的数据,帮助用户了解表的结构、存储引擎、行数、索引大小等详细信息。以下是该表的主要内容和注意事项:

表结构概述

information_schema.TABLES 表包含以下字段:

  • TABLE_CATALOG:表所属的目录名称,始终为 def
  • TABLE_SCHEMA:表所属的数据库名称。
  • TABLE_NAME:表的名称。
  • TABLE_TYPE:表示表的类型,如 BASE TABLEVIEWSYSTEM VIEW。需要注意的是,该表不列出 TEMPORARY 表。
  • ENGINE:存储引擎类型。对于分区表,显示所有分区使用的存储引擎名称。
  • VERSION:存储引擎版本信息。由于 MySQL 8.0 删除了 .frm 文件,该字段现在固定为 10,表示 MySQL 5.7 的最后一个 .frm 文件版本。
  • ROW_FORMAT:可选值包括 FixedDynamicCompressedRedundantCompact。对于 MyISAM 表,Dynamic 对应 myisamchk -dvv 记录的 Packed 格式。
  • TABLE_ROWS:行数。对于 MyISAM,该值是精确的计数。对于 InnoDB,该值是近似值,可能与实际值相差 40% 到 50%。使用 SELECT COUNT(*) 获取准确计数。
  • AVG_ROW_LENGTH:行的平均长度。
  • DATA_LENGTH:对于 MyISAM,表示数据文件的总字节数。对于 InnoDB,表示聚集索引分配的大致空间量(以页为单位)。其他存储引擎的信息请参考相关文档。
  • MAX_DATA_LENGTH:对于 MyISAM,表示数据文件的最大允许大小。对于 InnoDB,该字段值为 0。其他存储引擎的信息请参考相关文档。
  • INDEX_LENGTH:对于 MyISAM,表示索引文件的总字节数。对于 InnoDB,表示非聚集索引分配的大致空间量(以页为单位)。其他存储引擎的信息请参考相关文档。
  • DATA_FREE:已分配但未使用的字节数。对于 InnoDB 表,表示该表空间内的空闲空间。对于位于共享表空间中的表,空闲空间是共享表空间的空闲部分。即使 DATA_FREE 显示为 0,只要不需要新分配空间,仍可插入行。对于 NDB Cluster,DATA_FREE 表示磁盘上为磁盘数据表或片段分配但未使用的空间。
  • AUTO_INCREMENT:下一个 AUTO_INCREMENT 值。
  • CREATE_TIME:表创建的时间。
  • UPDATE_TIME:数据文件上次修改的时间。对于 InnoDB,由于其表文件没有时间戳,该字段可能为 NULL。对于 MyISAM,在 Windows 系统上,时间戳可能不准确。
  • CHECK_TIME:表最后一次检查的时间。对于 InnoDB 表和分区表,该字段始终为 NULL
  • TABLE_COLLATION:表的默认排序规则。
  • CHECKSUM:如果表有实时校验和,显示校验和值。
  • CREATE_OPTIONS:创建表时使用的额外选项。对于分区表,该字段显示分区信息。对于加密的表空间,CREATE_OPTIONS 可以显示加密子句。从 MySQL 8.0.16 开始,对于加密的每个表文件,CREATE_OPTIONS 会显示相应的加密选项。
  • TABLE_COMMENT:创建表时使用的注释。

注意事项

  • NDB 表:该表的 AVG_ROW_LENGTHDATA_LENGTH 列显示适当值,但未考虑 BLOB 列。DATA_LENGTH 仅包含主存中的数据,MAX_DATA_LENGTHDATA_FREE 列适用于磁盘数据。
  • NDB Cluster 磁盘数据表MAX_DATA_LENGTH 表示磁盘数据表或片段的磁盘部分分配空间。内存中的数据资源使用情况由 DATA_LENGTH 列报告。
  • MEMORY 表DATA_LENGTHMAX_DATA_LENGTHINDEX_LENGTH 值近似于实际分配的内存量。由于分配算法预留大量内存以减少分配操作,实际使用内存可能小于这些值。
  • 视图:除了 TABLE_NAMECREATE_TIMETABLE_COMMENT,其他字段大多为 0NULL
  • SHOW TABLE STATUSSHOW TABLES 等语句的比较

    information_schema.TABLES 表提供的信息与 SHOW TABLE STATUSSHOW TABLES 等语句等价。以下是等价的语句示例:

    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_COMMENTFROM information_schema.tablesWHERE table_schema = 'db_name'   [AND table_name LIKE 'tb_name'];SHOW FULL TABLES FROM db_name [LIKE 'tb_name'];

    这两个语句返回相同的信息,适用于不同的场景。你可以根据需求选择使用哪种方式获取表信息。

    总结

    information_schema.TABLES 表是获取数据库表统计信息的重要工具。它提供了丰富的字段,帮助用户了解表的结构和存储引擎特性。通过合理使用该表,可以快速获取表的详细信息,优化数据库性能和管理。

    上一篇:MySQL 关于元数据的使用
    下一篇:SpringBoot 使用注解进行接口参数校验

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年03月26日 00时44分59秒