MySQL引擎

MySQL引擎

  1. InnoDB ,常用
  2. MyIsam ,常用
  3. Memory(也叫HEAP)堆内存嘛
  4. Mrg_Myisam(分表的一种方式–水平分表)
  5. Blackhole(黑洞引擎)

InnoDB(默认的存储引擎)

结构

InnoDB 存储引擎采用“聚集索引”的数据存储方式实现B-Tree索引,所谓“聚集”,就是指数据行和相邻的键值紧凑地存储在一起,注意 InnoDB 只能聚集一个叶子页(16K)的记录(即聚集索引满足一定的范围的记录),因此包含相邻键值的记录可能会相距甚远。

下图说明了 InnoDB聚集索引的实现方式,同时也体现了一张 innoDB表的结构,可以看到,InnoDB 中,主键索引和数据是一体的,没有分开。:
在这里插入图片描述

特点

  1. 支持事务:提供了对数据库ACID事务的支持,实现了SQL标准的四种隔离级别。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务。
  2. 有行级锁和外键约束,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。
  3. 但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。
  4. 它没有保存表的行数,当SELECT COUNT(*) FROM TABLE时需要扫描全表。全表扫描效率可能会低。
  5. Innodb不支持全文索引。

应用场景

  1. 经常更新的表,适合处理多重并发的更新请求。
  2. 支持事务。
  3. 可以从灾难中恢复(通过bin-log日志等)。
  4. 外键约束。只有他支持外键。
  5. 支持自动增加列属性auto_increment。

MyIsam(MySQL5.5版本之前默认)

MyISAM索引文件【.MYI (MYIndex)】和数据文件【.MYD (MYData)】是分离的,索引文件仅保存记录所在页的指针(物理位置),通过这些地址来读取页,进而读取被索引的行。先来看看结构图
在这里插入图片描述

特点

  1. 不支持事务的设计:但是并不代表着有事务操作的项目不能用MyIsam存储引擎,可以在service层进行根据自己的业务需求进行相应的控制。
  2. 不支持外键的表设计。
  3. 使用表级锁。
  4. 极度强调快速读取操作:MyISAM 默认会把索引读入内存,直接在内存中操作,查询速度很快。
  5. MyIASM中存储了表的行数。
  6. MyISAM支持全文索引。

适用场景

  1. 如果数据库insert和update的操作比较多的话比较适用。
  2. 整天对表进行加锁的场景。
  3. 极度强调快速读取操作。

什么是外键

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

区别和选择

主要区别:

  1. InnoDB支持事务,MyISAM不支持。
  2. InnoDB查询更慢,适合写多读少,MyISAM查询更快,适合读多写少。
  3. InnoDB聚集索引,MyISAM非聚集索引。

选择:

  1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
  2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。
  3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;
  4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。

原文链接:https://blog.csdn.net/len9596/article/details/80206532

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值