InnoDB和MyISAM区别

InnoDB和MyISAM区别

Mysql默认存储引擎为InnoDB。
1.InnoDB支持事务,MyISAM不支持事务。
2.InnoDB支持外键,MyISAM不支持外键。
3.InnoDB是聚集索引,MyISAM是非聚集索引。

  • 聚集索引的文件主要存放在主键索引的叶子节点上,因此InnoDB是必须要有主键的,通过主键索引查询效率很高,但是辅助索引需要两次查询,先查询主键,再通过主键去查询数据。因此主键不应该过大,主键太大导致其它索引也都会很大。
  • MyISAM是非聚集索引,数据文件是分离的。索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

4.InnoDB不保存表的具体行数,select count(*) from table时需要全表扫描。MyISAM用一个变量保存了整个表的行数。执行上述语句时只需要读出变量即可,速度很快。
5.InnoDB最小的锁粒度是行锁,MyISAM最小的锁粒度是表锁。MyISAM 一个更新语句会锁住整张表,导致其它查询或者更新等操作会被阻塞。

InnoDB中索引

Mysql中默认的存储引擎为Innodb。Innodb中有聚簇索引和非聚簇索引。
其中聚簇索引就是主键索引,按照每张表的主键构造一棵B+树,同时叶子节点中存放的是表的一整行数据。
非聚簇索引又称为辅助索引,包括唯一索引,前缀索引,组合索引等。

InnoDB通过主键来聚集数据,如果没有定义主键,InnoDB会选择非空的唯一索引来替代,如果这样的索引不存在,InnoDB会隐式地定义一个主键来作为聚簇索引。

聚簇索引优点和缺点:

优点:
a.数据访问更快。因为聚簇索引将索引和数据都保存在同一个B+树中。
b.聚簇索引对于主键的排序查找或者范围查找速度非常快。
缺点:
a.更新主键的代价较高。因为会导致被更新的行移动。
b.辅助索引需要两次索引查找,第一次找到主键值,第二次根据主键值找到行数据。

非聚簇索引(辅助索引)

在聚簇索引上创建的索引成为辅助索引,辅助索引访问数据需要二次查找。
辅助索引的叶子节点存储的不再是行的物理地址,而是主键值。辅助索引先找到主键值,在通过主键值找到对应的数据。

由于叶子节点只能按照一棵B+树排序,所以一张表只能由一个聚簇索引。辅助索引的存在不影响聚簇索引的组织,所以一张表可以有多个辅助索引。

MyIsam中索引

MyIsam中索引和数据是分离开的,索引文件保存数据记录的地址。
1.MyIsam中主键索引:
使用B+树作为索引结构,叶子节点中存放的是数据记录的地址。
2.MyIsam中辅助索引和主键索引在结构上没有区别,主键索引要求key是唯一的,而辅助索引的key可以重复。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值