MySQL 8.4 参考手册  /  MySQL 数据字典  /  INFORMATION_SCHEMA 和数据字典集成

16.5 INFORMATION_SCHEMA 和数据字典集成

随着数据字典的引入,以下 INFORMATION_SCHEMA 表作为数据字典表上的视图实现

对这些表的查询现在效率更高,因为它们是从数据字典表而不是通过其他较慢的方式获取信息。特别是,对于作为数据字典表视图的每个 INFORMATION_SCHEMA

  • 服务器不再需要为 INFORMATION_SCHEMA 表的每个查询创建一个临时表。

  • 当底层数据字典表存储以前通过目录扫描(例如,枚举数据库名称或数据库中的表名)或文件打开操作(例如,从 .frm 文件读取信息)获得的值时,对这些值的 INFORMATION_SCHEMA 查询现在使用表查找。(此外,即使对于非视图 INFORMATION_SCHEMA 表,数据库和表名等值也是通过从数据字典中查找来检索的,并且不需要目录或文件扫描。)

  • 底层数据字典表上的索引允许优化器构建高效的查询执行计划,这与之前使用每个查询一个临时表来处理 INFORMATION_SCHEMA 表的实现不同。

上述改进也适用于显示与作为数据字典表视图的 INFORMATION_SCHEMA 表相对应的信息的 SHOW 语句。例如,SHOW DATABASES 显示的信息与 SCHEMATA 表相同。

除了引入数据字典表视图外,STATISTICSTABLES 表中包含的表统计信息现在也被缓存,以提高 INFORMATION_SCHEMA 查询性能。系统变量 information_schema_stats_expiry 定义了缓存的表统计信息过期前的时间段。默认值为 86400 秒(24 小时)。如果没有缓存的统计信息或统计信息已过期,则在查询表统计信息列时,将从存储引擎中检索统计信息。要随时更新给定表的缓存值,请使用 ANALYZE TABLE

可以将 information_schema_stats_expiry 设置为 0,以使 INFORMATION_SCHEMA 查询直接从存储引擎检索最新统计信息,但这不如检索缓存的统计信息快。

有关更多信息,请参见 第 10.2.3 节 “优化 INFORMATION_SCHEMA 查询”

MySQL 8.4 中的 INFORMATION_SCHEMA 表与数据字典紧密相连,导致了一些使用差异。请参见 第 16.7 节 “数据字典使用差异”