聚簇索引和非聚簇索引
- 只有Innodb有聚簇索引,MyISAM引擎没有聚簇索引。
- 主键一定是聚簇索引,MySQL的InnoDB中一定有主键,即使开发人员不手动设置,则会使用unique索引,没有unique索引,则会使用数据库内部的一个行的id来当作主键索引,其他普通索引需要区分SQL场景,当SQL查询的列就是索引本身时,我们称这种场景下该普通索引也可以叫做聚簇索引。
聚簇索引
-
聚簇索引是没有SQL可以单独生成的,其按照每张表的主键来构成一个B+树,叶子节点存放的是整张表的行数据,并且表里只能按照一颗B+树进行排序,所以一张表只能有一个聚簇索引。
-
特点:数据的物理存储顺序和索引顺序一致,一个表建立好了,存储的物理顺序也不会再改变了,所以说一张表只能有一个聚簇索引,没有主键就会自动创建。
-
在Innodb中,聚簇索引默认就是主键索引
-
如果表里没有主键时:
- 数据库会默认生成一个唯一不为空的索引列作为主键,成为此表的聚簇索引;
- 如果没有这个索引的话,Innodb会隐式生成一个主键来作为聚簇索引;
非聚簇索引
索引的存储和数据的存储是分离的,也就是说找到了索引但没找到数据,需要根据索引上的值(主键)再次回表查询,非聚簇索引也叫做辅助索引。
- 非聚簇索引包含复合索引,唯一索引,前缀索引,其都是基于B+树的。
网友评论