密集索引和稀疏索引:

聚簇索引:表数据文件本身就是按B+Tree组织的一个索引结构(它的物理存放顺序和逻辑顺序一一对应),这棵树的叶节点data域就是数据页,因此保存了完整的数据记录。innodb主键索引是是用聚簇索引来组织表且真实物理存储顺序只有一种,因此一个表中必须要有一个主键索引,如果没有设置聚集索引,默认使用主键来作为聚集索引。

辅助索引,一个表中除聚集索引外,其它均为辅助索引(即二级索引),innodb中二级索引的叶子节点指向聚簇索引,聚簇索引来找到相应的行

优点:

1)适合范围查询(因为索引值都顺序排列的)。

2)查询更快(因为索引和数据放在一起,这样就不需要在进行磁盘查找了)。

缺点:

1)不适合在经常需要变更的列上建立聚集索引,变更之后需要维护物理顺序。

非聚簇索引:叶节点的data域存放的是指向数据记录的地址,数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,因此键值逻辑顺序与物理顺序不是一一对应的。

 

密集索引:文件中的每个搜索码值都对应一个索引值,就是叶子节点保存了整行, innodb只有一个

稀疏索引:文件只为索引码的某些值建立索引项, 比如 innodb的其他索引只存了键位信息和主键, myisam的所有索引都是

 

MyISAM

不管是主键索引、唯一键索引或者普通索引,其索引都属于稀疏索引

 

InnoDB

若一个主键被定义,该主键则作为密集索引    

没有主键被定义,该表的第一个唯一非空索引则作为密集索引

不满足以上条件,innodb内部会生成一个隐藏主键(密集索引)

非主键索引(稀疏索引)存储相关键位和它对应的主键值,包含两次查找