bin
发布于

关于mysql问题:聚集索引和非聚集索引的区别

没有创建主键怎么办?

mysql在innodb引擎下,主键索引中,存储的是不是 key和key对应的数据行(一行数据,不是指向地址的指针)?

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