Mysql 什么是聚集索引和非聚集索引?
1. 聚集索引
聚集索引就是基于主键创建的索引,在InnoDB的引擎里,一张表的数据对应的物理文件本身就是按照B+Tree来组织的,聚集索引就是按照每张表的增加来构建的这样一个B+树。叶子节点会存储这个表里的每一行数据记录。 聚集索引并不是仅仅是一种索引类型,还代表的一种数据存储方式。并且表必须有一个主键,如果没有主键InnoDB会默认选择一个隐藏列,作为主键索引来存储表的数据,一般情况是建议自增id作为主键。有连续性的在磁盘下入性能和检索性能上都会很高。如果使用uuid这种随机id的话,频繁插入会导致磁盘随机io,从而性能下降。并且一个表只能存在一个聚集索引,如果有多个就会有多套副本,浪费磁盘空间,并且当操作的时候会让数据维护更困难。
1.1 为什么建议使用连续id?
有连续性的在磁盘写入性能和检索性能上都会很高。如果使用uuid这种随机id的话,频繁插入会导致磁盘随机io,从而性能下降。
1.2 为什么一个表只有一个聚集索引?
如果有多个就会有多套副本,浪费磁盘空间,并且当操作的时候会让数据维护更困难。
2. 非聚集索引
除了主键索引以外的索引都叫做非聚集索引,也叫做二级索引。非聚集索引子节点存放的不是实际数据,而是指向实际数据的指针,一个表中可以拥有多个非聚集索引。
如有错误欢迎指正
下一篇:
网上书店售书系统的设计与实现