INFORMATION_SCHEMA和数据字典集成
随着数据字典的引入,以下INFORMATION_SCHEMA
表被实现为数据字典表的视图:
CHARACTER_SETS
CHECK_CONSTRAINTS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_STATISTICS
EVENTS
FILES
INNODB_COLUMNS
INNODB_DATAFILES
INNODB_FIELDS
INNODB_FOREIGN
INNODB_FOREIGN_COLS
INNODB_INDEXES
INNODB_TABLES
INNODB_TABLESPACES
INNODB_TABLESPACES_BRIEF
INNODB_TABLESTATS
KEY_COLUMN_USAGE
KEYWORDS
PARAMETERS
PARTITIONS
REFERENTIAL_CONSTRAINTS
RESOURCE_GROUPS
ROUTINES
SCHEMATA
STATISTICS
ST_GEOMETRY_COLUMNS
ST_SPATIAL_REFERENCE_SYSTEMS
TABLES
TABLE_CONSTRAINTS
TRIGGERS
VIEWS
VIEW_ROUTINE_USAGE
VIEW_TABLE_USAGE
这些表上的查询现在更加高效,因为它们从数据字典表中获取信息,而不是通过其他较慢的方式获取信息。特别是,对于INFORMATION_SCHEMA
作为数据字典表视图的每个表:
- 服务器不再必须为表的每个查询创建一个临时
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
查询直接从存储引擎检索最新统计信息,其速度不及检索缓存的统计信息。
有关更多信息,请参见“优化INFORMATION_SCHEMA查询”。
INFORMATION_SCHEMA
MySQL 8.0中的表与数据字典紧密相关,因此在用法上存在一些差异。