MySQL 8.4 Reference Manual  /  MySQL Data Dictionary  /  INFORMATION_SCHEMA and Data Dictionary Integration

16.5 INFORMATION_SCHEMA 和数据字典集成

数据字典的引入后,以下INFORMATION_SCHEMA表格实现为数据字典表的视图:

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

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

  • 当存储目录表中的值来自之前的目录扫描(例如,枚举数据库名称或表名称)或文件打开操作(例如,从.frm文件中读取信息),那么INFORMATION_SCHEMA查询将使用表查找来获取这些值。(此外,即使是非视图的INFORMATION_SCHEMA表,数据库和表名称也通过数据字典进行查找,不需要目录或文件扫描。)

  • 数据字典表上的索引允许优化器构建高效的查询执行计划,这在之前实现中使用临时表来处理INFORMATION_SCHEMA表时不可能。

前述改进也适用于SHOW语句,显示INFORMATION_SCHEMA视图表中的信息。例如,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 查询”

INFORMATION_SCHEMA 表格在 MySQL 8.4 中紧密地与数据字典相关,导致了几个使用差异。见第16.7节,“数据字典使用差异”