美文网首页
聚簇索引和非聚簇索引详解

聚簇索引和非聚簇索引详解

作者: join_a922 | 来源:发表于2018-12-10 12:18 被阅读14次

 聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织的(类似于Oracle的索引组织表)。

InnoDB通过主键聚簇数据,如果没有定义主键,会选择一个唯一的非空索引代替,如果没有这样的索引,会隐式定义个主键作为聚簇索引。

对于非聚簇索引表来说(右图),表数据和索引是分成存储的,主键索引和二级索引存储上没有任何区别。

而对于聚簇索引表来说(左图),表数据是和主键一起存储的,主键索引的叶结点存储行数据,二级索引的叶结点存储行的主键值。

聚簇索引表最大限度地提高了I/O密集型应用的性能,但它也有以下几个限制:

1)插入速度严重依赖于插入顺序,按照主键的顺序插入是最快的方式,否则将会出现页分裂,严重影响性能。因此,对于InnoDB表,我们一般都会定义一个自增的ID列为主键。

2)更新主键的代价很高,因为将会导致被更新的行移动。因此,对于InnoDB表,我们一般定义主键为不可更新。

3)二级索引访问需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

二级索引的叶节点存储的是主键值,而不是行指针(非聚簇索引存储的是指针或者说是地址),这是为了减少当出现行移动或数据页分裂时二级索引的维护工作,但会让二级索引占用更多的空间。

聚簇索引的叶节点就是数据节点,而非聚簇索引的页节点仍然是索引检点,并保留一个链接指向对应数据块。

聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。

相比之下,聚簇索引适合排序,非聚簇索引不适合用在排序的场合。因为聚簇索引本身已经是按照物理顺序放置的,排序很快。非聚簇索引则没有按序存放,需要额外消耗资源来排序。

当你需要取出一定范围内的数据时,用聚簇索引也比用非聚簇索引好。

相关文章

  • MySQL索引

    聚簇索引和非聚簇索引 只有Innodb有聚簇索引,MyISAM引擎没有聚簇索引。 主键一定是聚簇索引,MySQL的...

  • MySQL:聚簇索引

    什么是聚簇索引?什么时候使用聚簇索引和非聚簇索引? 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据非...

  • 聚簇索引和非聚簇索引详解

    聚簇索引是一种数据存储方式,它实际上是在同一个结构中保存了B+树索引和数据行,InnoDB表是按照聚簇索引组织的(...

  • 数据库

    介绍一下聚簇索引和非聚簇索引 聚簇索引(innobe)的叶子节点就是数据节点 而非聚簇索引(myisam)的叶子节...

  • 索引

    mysql中的索引 MySQL中普遍使用B+Tree做索引,但在实现上又根据聚簇索引和非聚簇索引而不同。 聚簇索引...

  • 聚簇索引和非聚簇索引

    索引通过B+树存储。 聚簇索引:索引和数据是存在一起的。当找到索引之后索引叶子节点存的就是数据。 非聚簇索引:索引...

  • 聚簇索引和非聚簇索引

    聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。MySQL数据库中innodb存储引擎,B+树索引可以分为...

  • 聚簇索引和非聚簇索引

    上网查资料的时候我们经常能看到聚簇索引和非聚簇索引,那我们来简单了解下: (一)聚簇索引(1) 百度百科的解释是:...

  • 聚簇索引和非聚簇索引

    聚簇索引:索引的叶节点就是数据节点。innodb 非聚簇索引:非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指...

  • 聚簇索引非聚簇索引

    从数据结构角度1、B+树索引2、hash索引3、FULLTEXT索引(InnoDB引擎5.7以后支持)4、R-Tr...

网友评论

      本文标题:聚簇索引和非聚簇索引详解

      本文链接:https://www.haomeiwen.com/subject/rzsrhqtx.html