MYSQLINNODB索引构成详解

作者:郑啟龙

摘要:

对于MYSQL的INNODB存储引擎的索引,大家是不陌生的,都能想到是B+树结构,可以加速SQL查询。但对于B+树索引,它到底“长”得什么样子,它具体如何由一个个字节构成的,这些的基础知识鲜有人深究。本篇文章从MYSQL行记录开始说起,层层递进,包括数据页,B+树聚簇索引,B+树二级索引,最后在文章末尾给出MYSQL索引的建议。文章涉及较多基础知识,内容较为枯燥,因此采用较多的图片补充说明,希望能对读者有帮助。

A.一条记录存储格式:COMPACT行记录结构

mysql是关系型数据库,每一行记录都是表结构定义的关系的显示表达。在脑中很直观地想到,记录存储时也可能按行存储。

的确,mysql是这么存储一条行记录的。但会添加一些额外信息,来补充行记录信息。

有一个概念可能大家不熟悉,是。mysql数据库类型中的VARCHAR(M),VARBINARY(M),各种TEXT,BLOB类型,这些类型的数据长度是可变的,称数据类型为可变长类型的列为变长字段。

另外,mysql会默认为行记录添加一些列(隐藏列)。上图补充这些隐藏列之后,完整行记录的结构如:

DB_ROW_ID:唯一标识一条记录,在表中未设置主键或未有不允许为NULL的UNIQUE键时,则MYSQL新增该隐藏列作为主键。DB_TRX_ID:事务ID。DB_ROLL_PTR:回滚指针。

下面再详细的铺开,关于记录的额外信息的具体内容。

通过真实的数据库表的行数据,来强化下上面的概念。首先新增一个表,并在表中insert两条记录。

createtablerecord_format_demo(c1varchar(10),c2varchar(10)notnull,c3char(10),c4varchar(10))charset=asciirow_format=


转载请注明:http://www.aierlanlan.com/cyrz/8307.html