Mysql--序列1--聚簇索引&非聚簇索引

MySQL作为一个开源的数据库,在各大互联网公司使用极为普遍。本系列将从Mysql开始,一步步展示关于存储设计的诸多策略。

说到InnoDB和MyISAM的区别,很多人都会提到一个支持事务,一个不支持;一个是行锁,一个是表锁(这个其实不准确,后面会详细阐述)。

但跟日常使用最密切相关的,更基本的,其实是另外一个关键区别:InnoDB是聚簇索引,MyISAM是非聚簇索引。如下图所示:

MyISAM的非聚餐索引:数据和索引是分开存放的 
这里写图片描述

InnoDB的聚簇索引: 数据和主键索引是存放在一起的,其他索引叶子结点存放的主键id。 
这里写图片描述

那这种不同,对于我们日常使用,又有什么影响呢?

查询

很显然,对于MyISAM,要查2次,先查1次索引,再查一次数据; 而对于InnoDB的主键查询,因为数据和索引存放在一起,只需要查1次,显然性能更快。

所以如果你采用了InnoDB,尽量让上层业务通过主键查询。

插入

对于MyISAM,数据总是顺序在文件末尾添加;而对于InnoDB,如果主键是自增ID,那数据也会是在文件末尾按顺序append。

但如果你用了InnoDB,但主键又不是自增,那就会发生B+树中间叶子结点的split,对应的,就会发生文件的随机读写,而不是顺序写入,这会极大的影响性能。

所以,如果你采用了InnoDB,尽量把主键设成自增ID。

下篇将开始介绍索引的设计策略。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值