发布网友
发布时间:2024-08-20 17:26
共1个回答
热心网友
时间:2024-08-29 05:55
MySQL 8.0 的革新中,数据字典的架构焕然一新,将元数据整合至mysql库的核心地带,诸如用户表和系统表,均统一存储在31张数据字典表中。其中,dd_properties等关键表结构和操作细节,详尽记录在MySQL官方文档中。默认情况下,这些神秘的表隐身于后台,但在Debug版本中,通过特殊权限调整,你可窥探其内部世界。
让我们聚焦在核心的四个表上:tables(SYS_TABLES)、columns(SYS_COLUMNS)、indexes(SYS_INDEXES)和index_column_usage(SYS_FIELDS)。tables如同数据库的户籍簿,记录每个表的元数据;columns揭示了字段的详细信息;indexes是索引的编年史,而index_column_usage则深入揭示了索引字段的使用情况,额外包含了order、length(字段长度或前缀长度)和hidden(隐藏属性)等关键字段。一个示例表t5,生动展示了这些概念在实际中的应用。
要深入了解数据字典,可以通过information_schema这个桥梁,如INNODB_TABLES对应tables,INNODB_COLUMNS对应columns等,建立起数据与表的双向映射。
MySQL在创建数据字典时,巧妙地运用了Storage_adapter(单例模式)作为临时存储,同时m_core_registry负责全局的元数据管理。创建过程分三步走:首先,将对象表注册到System_tables;接着,逐个创建表并暂存元数据;最后,将这些宝贵的信息永久性地写入相应的数据字典表。启动时,数据字典的元数据在内存中预先加载,形成一个微妙的逻辑循环。通过m_core_registry,我们得以解开这个谜团,确保表的正确加载。
MySQL采用了“备用钥匙”策略来解锁数据字典的奥秘:首先,将表对象的元数据注册成DDL语句形式;然后,遍历这些信息,生成临时的元数据存入m_core_registry;接着,利用这些临时元数据在mysql.ibd中获取所有数据字典表的完整信息,加载到内存并正式打开;随后,清理m_core_registry中的临时数据;最后,从表空间中读取22个核心元数据,再次存储并完成整个过程。
经过这些步骤,数据字典表的元数据已准备就绪,等待你的探索。核心数据字典表元数据,如catalogs和character_sets等,被精心挑选出来,支撑起整个数据库世界的基石。
当MySQL启动时,它凭借预先编码的表定义和m_core_registry中的临时备用元数据,顺利打开数据字典表,这个过程既复杂又巧妙。一个看似简单的替换背后,隐藏着一个有待解答的疑问:为何选择备用元数据来打开原配的表?这背后的原因,或许有待进一步的深入研究和讨论。
总结来说: