剑指Offer(SQL)——密集索引和稀疏索引
密集索引和稀疏索引的区别:
- 密集索引文件中的每个搜索码值都对应一个索引值
- 稀疏索引文件中只为索引码的某些值建立索引项
接下来以MySQL为例说明:
在mysql中有两种搜索引擎:MyISAM和InnoDB
MyISAM引擎:
不管是主键索引,唯一键索引还是普通索引,其索引都属于稀疏索引。
InnoDB引擎:
- 若一个主键被定义,该主键则作为密集索引
- 若没有主键被定义,该表的第一个唯一非空索引则作为密集索引
- 若不满足以上条件,InnoDB内部会生成一个隐藏主键(密集索引)
- 非主键索引存储相关键位和其对应的主键值,包含两次查找