MySQL中InnoDB的一级索引、二级索引
即聚簇索引 密集索引和稀疏索引
聚簇索引:表数据文件本身就是按B+Tree组织的一个索引结构(它的物理存放顺序和逻辑顺序一一对应),这棵树的叶节点data域就是数据页,因此保存了完整的数据记录。innodb主键索引是是用聚簇索引来组织表且真实物理存储顺序只有一种,因此一个表中必须要有一个主键索引,如果没有设置聚集索引,默认使用主键来作为聚集索引。
每个InnoDB表具有一个特殊的索引称为聚簇索引(也叫聚集索引,聚类索引,簇集索引)。
如果表上定义有主键,该主键索引就是聚簇索引。
如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚簇索引。
如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。
表中的聚簇索引(clustered index )就是一级索引,除此之外,表上的其他非聚簇索引都是二级索引,又叫辅助索引(secondary indexes)。
有时候会看到网上说什么密集索引和稀疏索引,其实这里的密集指的就是每个索引记录上有没有包含整条数据记录。
有包含就叫密集索引
没有包含就叫稀疏索引
比如说聚簇索引就叫密集索引,其他索引就叫稀疏索引
不过密集索引和稀疏索引也有另一种实现,像Kafka实现的稀疏索引就是,不是所有数据都加对应的索引记录,而是每隔一定的字节数建立了一条索引,在查数据时,先查出离这个数据最近的索引,然后再从最近索引出发,往下查。