InnoDB和MyISAM区别

1.InnoDB存储引擎

InnoDB是Mysql的默认存储引擎(Mysql5.5之前是MyISAM)

  1. InnoDB存储引擎提供事务支持,InnoDB表能够自动从灾难中恢复。
  2. InnoDB支持自增长列(auto_increment),自增长列的值不能为空,如果在使用的时候为空的话,自动从现有的值开始增值,如果有但是比现在的还大,则就保存这个值。
  3. 使用的锁粒度为行级锁,可以支持更高的并发;InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上,如果访问没有命中索引,也无法使用行锁。
  4. InnoDB存储引擎支持外键(foreign key),外键所在的表称为子表而所依赖的表称为父表。
  5. InnoDB存储引擎最重要的是支持事务,以及事务相关联功能。
  6. 对于InnoDB类型的表,其数据的物理组织形式是聚簇表。所有的数据按照主键来组织。数据和索引放在一块,都位于B+数的叶子节点上;
  7. 在InnoDB中存在着缓冲管理,通过缓冲池,将索引和数据全部缓存起来,加快查询的速度;

2.MyISAM存储引擎

在5.5版本之前,MyISAM是MySQL的默认存储引擎,该存储引擎并发性差,不支持事务,所以使用场景比较少

  1. 每个MyISAM在磁盘上存储成3个文件,文件名都和表名相同,但是扩展名不同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据);、.MYI(MYIndex,存储索引);
  2. MyISAM 这种存储引擎不支持事务,不支持行级锁,只支持并发插入的表锁,主要用于高负载的select。
  3. 不支持外键,如果强行增加外键,不会提示错误,只是外键不其作用;
  4. 支持全文索引(MySQL5.6之后,InnoDB存储引擎也对全文索引做了支持),但是MySQL的全文索引基本不会使用,对于全文索引,现在有其他成熟的解决方案,比如:ElasticSearch,Solr,Sphinx等。
  5. 数据库所在主机如果宕机,MyISAM的数据文件容易损坏,而且难恢复;
  6. 在数据不再进行修改操作时,可以对MyISAM表进行压缩,压缩后可以提高读能力,原因是减少了磁盘I/O。

mysql数据的存储位置

mysql> show global variables like "%datadir%";
在这里插入图片描述
在这里插入图片描述
.frm文件:存储数据表的框架结构,文件名与表名相同,每个表对应一个同名frm文件,与操作系统和存储引擎无关,即不管MySQL运行在何种操作系统上,使用何种存储引擎,都有这个文件。
除了必有的.frm文件,根据MySQL所使用的存储引擎的不同(MySQL常用的两个存储引擎是MyISAM和InnoDB),存储引擎会创建各自不同的数据库文件。

InnoDB中:
.ibd文件:单表表空间文件,每个表使用一个表空间文件(file per table),存放用户数据库表数据和索引;
ibdata1、ibdata2等:系统表空间文件,存储InnoDB系统信息和用户数据库表数据和索引,所有表共用。

MyISAM中:
.MYD文件:即MY Data,表数据文件;
.MYI文件:即MY Index,索引文件;
.log文件:日志文件。

小结

1.InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交
2.InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败
3.InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的,MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针
4.InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描
5.Innodb不支持全文索引,而MyISAM支持全文索引,在涉及全文索引领域的查询效率上MyISAM速度更快高,5.7以后支持
6.MyISAM表格可以被压缩后进行查询操作
7.InnoDB支持表、行(默认)级锁,而MyISAM支持表级锁,InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上,如果访问没有命中索引,也无法使用行锁
8.InnoDB表必须有唯一索引(如主键)(没有指定的话会自己找/生产一个隐藏列id来充当默认主键),而Myisam可以没有
9.Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI
		Innodb:frm是表定义文件,ibd是数据文件
		Myisam:frm是表定义文件,myd是数据文件,myi是索引文件
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值