1. 程式人生 > >InnoDB數據字典詳解-系統表

InnoDB數據字典詳解-系統表

InnoDB 數據字典

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 */ 

下一節講解系統表的加載及普通表數據字典的加載原理。

InnoDB數據字典詳解-系統表