MySQL 9.0 参考手册  /  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 9.0 中的 INFORMATION_SCHEMA 表与数据字典紧密相连,导致一些使用差异。 请参阅 第 16.7 节,“数据字典使用差异”