随着数据字典的引入,以下 INFORMATION_SCHEMA
表作为数据字典表上的视图实现
KEYWORDS
对这些表的查询现在效率更高,因为它们是从数据字典表而不是通过其他较慢的方式获取信息。特别是,对于作为数据字典表视图的每个 INFORMATION_SCHEMA
表
服务器不再需要为
INFORMATION_SCHEMA
表的每个查询创建一个临时表。当底层数据字典表存储以前通过目录扫描(例如,枚举数据库名称或数据库中的表名)或文件打开操作(例如,从
.frm
文件读取信息)获得的值时,对这些值的INFORMATION_SCHEMA
查询现在使用表查找。(此外,即使对于非视图INFORMATION_SCHEMA
表,数据库和表名等值也是通过从数据字典中查找来检索的,并且不需要目录或文件扫描。)底层数据字典表上的索引允许优化器构建高效的查询执行计划,这与之前使用每个查询一个临时表来处理
INFORMATION_SCHEMA
表的实现不同。
上述改进也适用于显示与作为数据字典表视图的 INFORMATION_SCHEMA
表相对应的信息的 SHOW
语句。例如,SHOW DATABASES
显示的信息与 SCHEMATA
表相同。
除了引入数据字典表视图外,STATISTICS
和 TABLES
表中包含的表统计信息现在也被缓存,以提高 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 节 “数据字典使用差异”。