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

聚簇索引和非聚簇索引

作者: cold_style | 来源:发表于2020-12-30 19:34 被阅读0次

聚簇索引:索引的叶节点就是数据节点。innodb

非聚簇索引:非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。MyISAM

两个都B+树 叶子节点是 链表

聚簇索引需要注意的地方

当使用主键为聚簇索引时,主键最好不要使用uuid,因为uuid的值太过离散,不适合排序且可能出线新增加记录的uuid,会插入在索引树中间的位置,导致索引树调整复杂度变大,消耗更多的时间和资源。

建议使用int类型的自增,方便排序并且默认会在索引树的末尾增加主键值,对索引树的结构影响最小。而且,主键值占用的存储空间越大,辅助索引中保存的主键值也会跟着变大,占用存储空间,也会影响到IO操作读取到的数据量。

为什么主键通常建议使用自增id

聚簇索引的数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的。如果主键不是自增id,那么可以想 象,它会干些什么,不断地调整数据的物理地址、分页,当然也有其他一些措施来减少这些操作,但却无法彻底避免。但,如果是自增的,那就简单了,它只需要一 页一页地写,索引结构相对紧凑,磁盘碎片少,效率也高。

唯一索引和普通索引的区别:
普通索引在更新的时候会先去缓存中找数据没找到的话会先记录这次操作,等下一次取数据的时候进行数据merge减少了io次数
而唯一索引由于需要多对比一次冲突 这时候用change buffer 没什么意义 反而增大了维护changebuffer的开销。

所以一般修改删除比较多的时候都是用普通索引,如果更新完马上就要用的需求比较多的话就要考虑用唯一索引了。

覆盖索引:

覆盖索引:一个索引中包含所有需要查询字段的值

优点:无需回表

1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。
2.因为索引是按照列值顺序存储的,所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。
3.一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用
4.innodb的聚簇索引,覆盖索引对innodb表特别有用

相关文章

  • MySQL索引

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

  • MySQL:聚簇索引

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

  • 数据库

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

  • 索引

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

  • 聚簇索引和非聚簇索引

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

  • 聚簇索引和非聚簇索引

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

  • 聚簇索引和非聚簇索引

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

  • 聚簇索引和非聚簇索引

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

  • 聚簇索引非聚簇索引

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

  • 聚簇索引非聚簇索引

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

网友评论

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

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