欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

mysql源代碼數據結構

張吉惟2年前13瀏覽0評論

MySQL是一款開源的關系型數據庫管理系統,其源代碼中的數據結構十分重要。下面我們將從表結構、索引、日志等多個方面來分析MySQL源代碼中的數據結構。

表結構數據結構

struct TABLE {
...
TABLE_SHARE *s;     /* share info between instances of a table */
TABLE *next;        /* hash chain */
...
List*pos;    /* pos of non-const exprs in select-list */
List*ref_key;    /* key-refs in WHERE and ORDER BY */
...
Listkey_parts;   /* keys extracted by parser */
Listkeys;        /* real keys sorted in usage order */
...
TYPE type;
CHARSET_INFO *charset;
...
bool needs_rebuild;    /* true, if table needs rebuild */
bool in_use;           /* used in one query */
class Auto_increment_Global *auto_inc;
...
};

在MySQL中,table代表一個關系表。表結構中最重要的就是keys,表示了當前表所擁有的所有索引,這個索引列表是按照使用次數排序的。需要注意的是,這里的索引是按照鍵值的順序存儲的,而非按照記錄的順序存儲的。

索引數據結構

struct KEY {
...
TABLE *table;          /* table handle (from THD) */
Listkey_parts;  /* key parts, stored as a string */
uint32 key_length;     /* length of key_parts in bytes */
void *data;            /* used by handler to keep index status */
uint      keytype;             /* key unique and/or reverse flag */
Field **null_field;           /* fields used in dynamic index */
Field ***null_row;            /* dynamic's null_row cache */
List*org_key_parts;    /* key parts before sorting */
bool keep_prefix;             /* keep not distinct prefix values */
bool unique;                  /* if key is unique */
bool inc;                     /* if key is auto_increment */
bool has_null_part;           /* if the key has a NULL component */
bool on_dups_remove;          /* if key is PRIMARY and ON DUPLICATE REMOVE clause */
};

在MySQL中,KEY是索引的表示方式。key_parts中存儲了該索引涉及到的列,keytype中存儲了索引的類型(唯一的、逆序的等),unique屬性表示了該索引是否為唯一的。

日志數據結構

struct binlog_item
{
enum ItemType item_type;
/* number of bytes used in buffer */
uint32 length;
uchar *ptr;
...
};

MySQL中使用二進制日志實現了數據備份和恢復等功能,binlog_item中封裝了一個binlog事件的基本信息。其中item_type表示事件類型,length和ptr分別表示事件內容的長度和存儲位置。