您好,登錄后才能下訂單哦!
1、簡介
InnoDB中,實際上看不到系統表。有4個最基本的系統表來存儲表的元數據:表、列、索引、索引列等信息。這4個表分別是SYS_TABLES、SYS_COLUMNS、SYS_INDEXES、SYS_FIELDS。下面分別介紹
2、SYS_TABLES
存儲所有以InnoDB為存儲引擎的表,每條記錄對應一個表。該表的列分別是:
NAME:表名
ID:表的ID號
N_COLS:表的列數
TYPE:表的存儲類型,包括記錄的格式、壓縮等信息
MIX_ID、MIX_LEN、CLUSTER_NAME:暫時未用
SPACE:這個表所在的表空間ID。
這個表在NAME上有聚集索引,ID上有唯一二級索引。
3、SYS_COLUMNS
存儲列信息,每一列對應一條記錄。表列:
TABLE_ID:該列所屬表的ID
POS:該列在表中第幾列
NAME:列名
MTYPE:列的主數據類型
PRTYPE:列的精確數據類型
LEN:列數據長度,不包括varchar類型,因為該類型在記錄里面已經存儲了
PREC:列數據的精度。
該表的主鍵列是(TABLE_ID,POS)
4、SYS_INDEXES
存儲索引信息,每條記錄對應一個索引。
TABLE_ID:該列所屬表的ID
ID:索引的索引號
NAME:索引名
N_FIELDS:索引包含的列數
TYPE:索引類型,包括聚集索引、唯一索引、DICT_UNIVERSAL、DICT_IBUF
SPACE:索引所在表的表空間ID
PAGE_NO:該索引對應的B+樹的根頁面號。
該表主鍵(TABLE_ID,ID)
5、SYS_FIELDS
存儲定義的索引列,每條記錄對應一個索引列:
INDEX_ID:該列所在的索引ID
POS:該列在索引中第幾列
COL_NAME:列名
該表主鍵是(INDEX_ID,POS)
6、數據字典表根頁面位置,在innodb中使用系統表空間0號文件的第7號頁面存儲。該頁面存儲了上面4個表的5個根頁號,以及下一個表ID值、下一個索引ID值、下一個表空間ID值、rowid。第7號頁結構如下所示:
dict0boot.h::
/* Dictionary header offsets */
#define DICT_HDR_ROW_ID 0 /* The latest assigned row id */
#define DICT_HDR_TABLE_ID 8 /* The latest assigned table id */
#define DICT_HDR_INDEX_ID 16 /* The latest assigned index id */
#define DICT_HDR_MAX_SPACE_ID 24 /* The latest assigned space id,or 0*/
#define DICT_HDR_MIX_ID_LOW 28 /* Obsolete,always DICT_HDR_FIRST_ID*/
#define DICT_HDR_TABLES 32 /* Root of SYS_TABLES clust index */
#define DICT_HDR_TABLE_IDS 36 /* Root of SYS_TABLE_IDS sec index */
#define DICT_HDR_COLUMNS 40 /* Root of SYS_COLUMNS clust index */
#define DICT_HDR_INDEXES 44 /* Root of SYS_INDEXES clust index */
#define DICT_HDR_FIELDS 48 /* Root of SYS_FIELDS clust index */
#define DICT_HDR_FSEG_HEADER 56 /* Segment header for the tablespace segment into which the dictionary header is created */
下一節講解系統表的加載及普通表數據字典的加載原理。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。