非聚簇索引(非聚集索引/辅助索引/辅助键索引/二级索引 )

Exisi 2023-04-21 19:14:20
Categories: Tags:
  • MyISAM 中没有聚集索引,因此 MyISAM 查询时将使用主键索引(主索引)来加速查找数据记录,而不是像 InnoDB 存储引擎中使用聚集索引来加速查询。

 

  • MyISAM中,主索引和辅助索引在结构上没有任何区别,两者都是非聚簇索引。只不过主键索引(主索引)是一种特殊的非聚集索引,它具有唯一性,key 是唯一的,而辅助索引的 key 可以重复。

 

  • MyISAM 中以 Col1 为主键构建的非聚簇索引如下。

 

 

  • 建立在主键索引(主索引)上的表在插入新行,或者在行的主键被更新,该行必须被移动的时候会进行分页。分布发生在行的键值要求行必须被放到一个已经放满了数据的页的时候,此时存储引擎必须分页才能容纳该行。分页会导致表占用更多的磁盘空间

 

  • 主键索引在一张表只能有一个,而非聚簇索引在一张表里可以有多个

 

  • MyISAM 非聚簇索引直接使用索引列的值(非主键)作为非叶子节点的 key,叶子节点会将索引列的值(key)与对应数据行的物理地址存储在一起,形成一个 B+ 树结构

 

  1. 索引列为字符类型构建的非聚簇索引

 

 

  1. 索引列为数值类型构建的非聚簇索引

 

  • MyISAM中,当主键索引(主索引)在搜索条件中时,索引检索的算法为按照主键索引(主索引)构建的 B+Tree 搜索索引。当主索引(主键)不在搜索条件中时,索引检索的算法为按照非聚簇索引构建的  B+Tree 搜索索引。即有主键索引走主键索引,非主键索引走非聚簇索引。

 

  • 如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址,读取相应数据记录。