Skip to main content

12、聚簇索引和非聚簇索引

Y-aong...About 2 minmysql聚簇索引非聚簇索引

12、聚簇索引和非聚簇索引

一、答题思路

  • 分别解释聚簇索引和非聚簇索引

  • 聚簇索引的特点(优点)和使用场景

  • 聚簇索引的缺点

  • 使用案例

二、聚簇索引

聚簇索引:将数据存储open in new window与索引放到了一块,找到索引也就找到了数据,一般在 innodb 存储引擎中。也是由于聚簇索引将数据和索引放在一起,因此一个表中只有一个聚簇索引。

辅助索引:叶子节点存储的是聚簇索引的主键值,寻找数据需要先找到主键值在找到数据

误区:主键自动设为聚簇索引

聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。

如果你已经设置了主键为聚簇索引,必须先删除主键,然后添加我们想要的聚簇索引,最后恢复设置主键即可

结合图例

img
img

三、非聚簇索引

MyISAM 使用的是非聚簇索引。MyISAM 将数据和索引分开存储,表数据存储在独立的地方,这两颗 B+树的叶子节点都使用一个地址指向真正的表数据。他的主键索引和辅助索引是相互独立的,可以通过辅助键来获取数据,不需要访问主键的索引树

四、聚簇索引的优点

  • 行数据和索引放在一起,使用聚簇索引的时候一次性可以将数据取出,减少了 io 次数,查询会更加快

  • 适合排序,聚簇索引不适合

  • 范围性数据聚簇索引会更加适合

五、聚簇索引的缺点

  • 维护聚簇索引的成本比较昂贵,在插入新行时或者主键被更新时。新的记录可能会插入到记录的中间,需要强制移动之前的记录

  • 如果主键比较大的话,那辅助索引将会变的更大

  • 使用 uuid 等随机数作为主键索引,可能数据比较稀疏,可能造成查询比较慢

六、使用场景

在设计工作流流程中存在一个自增长的主键 id 还有一个随机数的流程 id

Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8