索引是一种用来快速检索数据的一种结构, 索引使用的好不好关系到对应的数据库性能方面, 这篇文章我们就来详细的介绍一下数据库的索引。
1. 页面的大小: B+ 树索引是一种 Key-Value 结构,通过 Key 可以快速查找到对应的 Value。B+ 树索引由根页面(Root)、分支页面(Branch)和叶子页面(Leaf)组成一棵树的结构。InnoDB 中,索引页面的大小由参数 innodb_page_size 控制,默认为 16K。
2. 行的大小: innoDB 对行的长度有一定的限制,每行记录的长度不能超过页面大小的一半。对于 16K 的页面大小,1 行记录最长大概在 8000 字节多一点。如果 1 行记录平均长度为 200 字节,那么一个页面最多可以容纳八十多行记录
3. key, value:
- 在分支页面中,Value 存了下一层索引页面的编号(Page No),页面编号就是页面在数据文件中的地址。
- 而在叶子页面中,Value 又是什么呢?
对于 InnoDB 的二级索引,你可以认为叶子页面中不存 Value,
而对于聚簇索引,Value 是表里面的所有字段。
type keyValue struct {
t uint8 //表示对应的类型
key any // 表示对应的key
value any // 表示存储的值,
}
我们先看一下面这段SQL 代码:
create table t_user(
id int not null,
username varchar(30),
email varchar(128),
phone varchar(15),
login_time datetime,
key idx_username(username),
primary key(id)
);
在innodb 中,表中的数据是按照对应的聚簇索引的形式来进行存储的, 聚簇索引的key 字段为表结构中的 primary key 指定的字段, 如果不指定对应的字段, 则会以非空的唯一索引作为Primary key, 活着对应的innodb 自动生成一个隐藏的字段作为 Primary key
在上面中我指定了对应的 primary key 为对应的 id 字段, 所以Id 就作为对应的默认索引,