16.5 INFORMATION_SCHEMA 和数据字典集成
数据字典的引入后,以下INFORMATION_SCHEMA
表格实现为数据字典表的视图:
-
KEYWORDS
对这些表的查询现在更高效,因为它们从数据字典表中获取信息,而不是通过其他较慢的方式。特别是,对于每个INFORMATION_SCHEMA
表,如果该表是一个数据字典表的视图:
-
服务器不再需要为每个查询创建临时表。
-
当存储目录表中的值来自之前的目录扫描(例如,枚举数据库名称或表名称)或文件打开操作(例如,从
.frm
文件中读取信息),那么INFORMATION_SCHEMA
查询将使用表查找来获取这些值。(此外,即使是非视图的INFORMATION_SCHEMA
表,数据库和表名称也通过数据字典进行查找,不需要目录或文件扫描。) -
数据字典表上的索引允许优化器构建高效的查询执行计划,这在之前实现中使用临时表来处理
INFORMATION_SCHEMA
表时不可能。
前述改进也适用于SHOW
语句,显示INFORMATION_SCHEMA
视图表中的信息。例如,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 查询”。
INFORMATION_SCHEMA
表格在 MySQL 8.4 中紧密地与数据字典相关,导致了几个使用差异。见第16.7节,“数据字典使用差异”。