随着数据字典的引入,下
INFORMATION_SCHEMA
表被实现为数据字典表的视图:
KEYWORDS
现在对这些表的查询更加高效,因为它们从数据字典表中获取信息,而不是通过其他更慢的方式。特别是,对于
INFORMATION_SCHEMA
作为数据字典表视图的每个表:
服务器不再必须为表的每个查询创建一个临时
INFORMATION_SCHEMA
表。当底层数据字典表存储以前通过目录扫描(例如,枚举数据库名称或数据库中的表名称)或文件打开操作(例如,从
.frm
文件中读取信息)获得的值时,INFORMATION_SCHEMA
对这些值的查询现在使用表查找代替。(此外,即使对于非视图INFORMATION_SCHEMA
表,数据库和表名等值也是通过从数据字典中查找来检索的,不需要目录或文件扫描。)基础数据字典表上的索引允许优化器构建高效的查询执行计划,这对于以前的
INFORMATION_SCHEMA
每个查询使用临时表处理表的实现来说是不正确的。
上述改进也适用于
SHOW
显示与作为
INFORMATION_SCHEMA
数据字典表视图的表相对应的信息的语句。例如,显示与表格
SHOW
DATABASES
相同的信息
。SCHEMATA
除了在数据字典表上引入视图之外,
STATISTICS
and
TABLES
表中包含的表统计信息现在被缓存以提高INFORMATION_SCHEMA
查询性能。系统变量定义缓存表统计信息过期之前的
information_schema_stats_expiry
时间段。默认值为 86400 秒(24 小时)。如果没有缓存统计信息或统计信息已过期,则在查询表统计信息列时从存储引擎中检索统计信息。要随时更新给定表的缓存值,请使用ANALYZE TABLE
information_schema_stats_expiry
可以设置为0
让
INFORMATION_SCHEMA
查询直接从存储引擎检索最新的统计信息,这不如检索缓存的统计信息快。
有关详细信息,请参阅 第 8.2.3 节,“优化 INFORMATION_SCHEMA 查询”。
INFORMATION_SCHEMA
MySQL 8.0 中的表与数据字典紧密相关,导致了一些用法上的差异。请参阅
第 14.7 节,“数据字典用法差异”。