12、聚簇索引和非聚簇索引
...About 2 min
12、聚簇索引和非聚簇索引
一、答题思路
分别解释聚簇索引和非聚簇索引
聚簇索引的特点(优点)和使用场景
聚簇索引的缺点
使用案例
二、聚簇索引
聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据,一般在 innodb 存储引擎中。也是由于聚簇索引将数据和索引放在一起,因此一个表中只有一个聚簇索引。
辅助索引:叶子节点存储的是聚簇索引的主键值,寻找数据需要先找到主键值在找到数据
误区:主键自动设为聚簇索引
聚簇索引默认是主键,如果表中没有定义主键,InnoDB 会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。
如果你已经设置了主键为聚簇索引,必须先删除主键,然后添加我们想要的聚簇索引,最后恢复设置主键即可。
结合图例

三、非聚簇索引
MyISAM 使用的是非聚簇索引。MyISAM 将数据和索引分开存储,表数据存储在独立的地方,这两颗 B+树的叶子节点都使用一个地址指向真正的表数据。他的主键索引和辅助索引是相互独立的,可以通过辅助键来获取数据,不需要访问主键的索引树
四、聚簇索引的优点
行数据和索引放在一起,使用聚簇索引的时候一次性可以将数据取出,减少了 io 次数,查询会更加快
适合排序,聚簇索引不适合
范围性数据聚簇索引会更加适合
五、聚簇索引的缺点
维护聚簇索引的成本比较昂贵,在插入新行时或者主键被更新时。新的记录可能会插入到记录的中间,需要强制移动之前的记录
如果主键比较大的话,那辅助索引将会变的更大
使用 uuid 等随机数作为主键索引,可能数据比较稀疏,可能造成查询比较慢
六、使用场景
在设计工作流流程中存在一个自增长的主键 id 还有一个随机数的流程 id
Powered by Waline v2.15.8