聚簇索引 vs 非聚簇索引

470 阅读1分钟

聚簇索引的叶节点就是数据节点
非聚簇索引的叶节点仍然是索引节点,并保留一个链接指向对应数据块。 InnoDB 引擎主键使用的是聚簇索引 MyISAM 引擎使用的是费聚簇索引

对比图

  • 非聚簇索引,叶级页指向表中的记录,记录的物理顺序与逻辑顺序没有必然的联系。非聚簇索引则更像书的标准索引表,索引表中的顺序通常与实际的页码顺序是不一致的。
  • 聚簇索引(左边)
    • 表数据和主键一起存储的,索引决定了数据的物理顺序

优缺点

  • 每个表只能有一个聚簇索引,因为一个表中的记录只能以一种物理顺序存放。但是,一个表可以有不止一个非聚簇索引。
  • 聚簇索引主键的插入速度要比非聚簇索引主键的插入速度慢很多。
  • 相比之下,聚簇索引适合排序,非聚簇索引不适合用在排序的场合。因为聚簇索引叶节点本身就是索引和数据按相同顺序放置在一起,索引序即是数据序,数据序即是索引序,所以很快。非聚簇索引叶节点是保留了一个指向数据的指针,索引本身当然是排序的,但是数据并未排序,数据查询的时候需要消耗额外更多的I/O,所以较慢。

参考

baike.baidu.com/item/%E9%9D… www.jianshu.com/p/54c6d5db4…