MySQL 8.0 將數據庫元信息都存放於InnoDB存儲引擎表中,在以前版本的MySQL中,數據字典不單單存放於特定的存儲引擎表中,還存放於元數據文件、非事務性存儲引擎表中。本文將會介紹MySQL 8.0對數據字典的改進,以及改進帶來的好處、影響以及侷限性。mysql
數據字典sql
(1)新版本以前的數據字典數據庫
數據字典是數據庫重要的組成部分之一,那麼什麼是數據字典?數據字典包含哪些內容呢?數據字典是對數據庫中的數據、庫對象、表對象等的元信息的集合。在MySQL中,數據字典信息內容就包括表結構、數據庫名或表名、字段的數據類型、視圖、索引、表字段信息、存儲過程、觸發器等內容。MySQL INFORMATION_SCHEMA庫提供了對數據局元數據、統計信息、以及有關MySQL server的訪問信息(例如:數據庫名或表名,字段的數據類型和訪問權限等)。該庫中保存的信息也能夠稱爲MySQL的數據字典。性能
在MySQL8.0以前,MySQL的數據字典信息,並無所有存放在系統數據庫表中,部分數據庫數據字典信息存放於文件中,其他的數據字典信息存放於數據字典庫中(INFORMATION_SCHEMA,mysql,sys)。例如表結構信息存放在.frm
文件中,數據庫表字段信息存放於INFORMATION_SCHEMA下的COLUMNS表中。早期,5.6版本以前,MyISAM是MySQL的默認存儲引擎,而做爲MyISAM存儲引擎,它是沒有數據字典的。只有表結構信息記錄在.frm
文件中。MySQL5.6版本以後,將InnoDB存儲引擎做爲默認的存儲引擎。在InnoDB存儲引擎中,添加了一些數據字典文件用於存放數據字典元信息,例如:.opt
文件,記錄了每一個庫的一些基本信息,包括庫的字符集等信息,.TRN
,.TRG
文件用於存放觸發器的信息內容。code
(2)新版本數據字典的改進server
最新的MySQL 8.0 發佈以後,對數據庫數據字典方面作了較大的改進。對象
首先是,將全部原先存放於數據字典文件中的信息,所有存放到數據庫系統表中,即將以前版本的
.frm
,.opt
,.par
,.TRN
,.TRG
,.isl
文件都移除了,再也不經過文件的方式存儲數據字典信息。
其次是對INFORMATION_SCHEM,mysql,sys系統庫中的存儲引擎作了改進,原先使用MyISAM存儲引擎的數據字典表都改成使用InnoDB存儲引擎存放。從不支持事務的MyISAM存儲引擎轉變到支持事務的InnoDB存儲引擎,爲原子DDL的實現,提供了可能性。索引
新數據字典帶來的影響事務
(1)INFORMATION_SCHEMA性能提高權限
8.0中對數據字典進行改進以後,很大程度上提升了對INFORMATIONS_SCHEMA的查詢性能,經過能夠經過查錶快速的得到想要查詢的數據,緣由是:
數據庫在查詢INFORMATION_SCHEMA的表時,再也不必定須要建立一張臨時表,能夠直接查詢數據字典表。
在以前版本中,數據字典信息不必定是存放於表中,因此在獲取數據字典信息時候,不單單是查表操做。例如讀取數據庫表結構信息,底層實際上是讀取.frm文件來得到,是一個文件打開讀取的操做。而在新版本中,數據字典信息均可以經過直接查表的方式獲取,替代那些獲取信息慢的方式。