聚簇索引(Clustered Index)指的是按照每张表的主键构建的一种索引方式
它是将表数据按照主键的顺序存储在磁盘上的一种方式。这种索引方式保证了行的物理存储顺序与主键的逻辑顺序相同,因此查找聚簇索引的速度非常快。
id | name | score | 物理地址 |
---|---|---|---|
1 | 叶良辰 | 78 | 0×01 |
2 | 龙傲天 | 88 | 0×02 |
3 | 赵日天 | 56 | 0×03 |
4 | 徐胜虎 | 77 | 0×04 |
非聚簇索引(Non-clustered Index)是指根据非主键字段创建的索引
也就是通常所说的二级索引。它不影响表中数据的物理存储顺序,而是单独创建一张索引表,用于存储索引列和对应行的指针。
聚簇索引的叶子节点中存储的是整行记录。而非聚簇索引的叶子节点中存储的是主键ID,所以,通过非聚簇索引的查询,需要进行一次回表,就是先查到ID,在通过ID查询所需字段。
没有创建主键怎么办?
我们知道,Innodb中的聚簇索引是自动按照每张表的主键构造一个B+树,那么不知道大家有没有想过这个问题,如果我们在表结构中没有定义主键,那怎么办呢?
如果我们在表结构中没有定义主键,那怎么办呢?
其实,数据库中的每行记录中,除了保存了我们自己定义的一些字段以外,还有一些重要的 db_row_id字段,其实他就是一个数据库帮我添加的隐藏主键,如果我们没有给这个表创建主键,会选择一个不为空的唯一索引来作为聚簇索引,但是如果没有合适的唯一索引,那么会以这个隐藏主键来创建聚簇索引。