聚簇索引和非聚簇索引

it2025-12-10  11

从文件存储的角度进行划分

聚簇索引: 将数据存储与索引放到了一块,找到索引也就找到了数据非聚簇索引:将数据与索引进行分开存储

聚簇索引

1. 一个仅有一个)一个聚簇索引,默认是主键2.聚簇索引性能最好而且具有唯一性(一个聚簇索引就相当于是包含了所有的数据,如果建立多个,会导致重复存储多份数据,内存消耗大)所以非常珍贵,必须慎重设置。一般要根据这个表最常用的SQL查询方式来进行选择,某个字段作为聚簇索引,或组合聚簇索引,这个要看实际情况

二级索引(存储索引) innoDB所独有的方式

1.聚簇索引的叶子节点存储了一行完整的数据,而二级索引则存储对应的主键值,相比于聚簇索引,占用的空间要少2.当我们需要为表建立多个索引时,如果都是聚簇索引,那将占用大量内存空间,所以InnoDB中主键所建立的是聚簇索引(主键索引),而唯一索引、普通索引、前缀索引等都是二级索引3.若对Name列进行条件搜索(建立二级索引),则需要两个步骤∶(回表)

(1)在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键

(2)使用找到的主键,在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据

只有InnoDB能建立二级索引

主键和行数据是一起被载入内存的,找打叶子节点就可以立刻将行数据返回了表假如使用UUID作为主键,会使得数据存储稀疏,这就会出现聚簇索引有可能有比全表扫描更慢,因为UUID是随机的。

非聚簇索引

MyISAM使用的是非聚簇索引,非聚簇索引的两颗B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已。主键索引B+树的节点存储了主键对应的数据地址,辅助键索引B+树存储了辅助键对应的数据地址,真正的表数据存储在独立的地方。由于索引树是独立的,通过辅助键检索无需访问主键的索引树。

效率会比较低一些,因为只是拿到了地址,只有地址的话还需要读取一次磁盘,从磁盘中去读取数据。

最新回复(0)