密集索引和稀疏索引的区别?

    密集索引文件中的每个搜索码值都对应一个索引值密集索引的叶子结点保存的不仅是键值,还保存了位于同一行记录里的其他列的信息。由于密集索引决定了表的物理排列顺序,一个表只能有一个物理排列顺序,所以一个表只能创建一个密集索引。

    稀疏索引文件只为索引码的某些值建立索引项叶子结点仅保存了键位信息以及该行数据的地址。有些稀疏索引只保存了键位信息及其主键。定位到叶子结点后,仍然需要通过主键或者地址定位到数据信息。

 

JAVA面试准备之数据库 索引模块(3)密集索引和稀疏索引的区别

 

Mysql中有两种存储引擎:MyISAM,InnoDB

MyISAM不管是主键索引或者唯一键索引或者普通索引,其索引均属于稀疏索引。

InnoDB每个表必须有且只有一个密集索引,密集索引的选取规则:

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

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

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

JAVA面试准备之数据库 索引模块(3)密集索引和稀疏索引的区别

InnoDB每个表必须有且只有一个密集索引,数据文件是和索引绑在一起的,表必须要有主键,通过主键索引效率很高。但是辅助键索引需要查两次,先查到主键索引然后再通过主键索引查询到数据。

而MyISAM是非聚集索引,数据文件与索引是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的,因此MyISAM在纯检索系统中(增删改)很少的系统中,其性能要好于InnoDB。

查看数据库下的表文件:

JAVA面试准备之数据库 索引模块(3)密集索引和稀疏索引的区别

 

Person_info_large表是InnoDB引擎的,数据和索引在同一个文件中。

Shop_info_small表是MyISAM引擎的,数据和索引在不同的文件中。MYD是数据文件。

 

相关文章:

  • 2021-05-02
  • 2021-07-01
  • 2022-12-23
  • 2021-07-17
  • 2021-10-12
  • 2021-05-26
  • 2021-11-30
  • 2021-08-02
猜你喜欢
  • 2022-12-23
  • 2021-07-11
  • 2021-05-03
  • 2021-08-16
  • 2021-08-15
  • 2021-04-19
相关资源
相似解决方案