随着数据字典的引入,以下 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 9.0 中的 INFORMATION_SCHEMA
表与数据字典紧密相连,导致一些使用差异。 请参阅 第 16.7 节,“数据字典使用差异”。