MySQL默认存储引擎的变迁
在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。
MyIASM引擎
1.写入操作是锁住全表、不支持数据库事务、也不支持外键。
2.MyISAM会保存好具体的行数
3.MyISAM使用的全部都是非聚集索引,可以不定义“主键”
4.MyISAM中的索引为B-Tree结构
InnoDB引擎
1.提供了“行锁”、支持数据库事务、提供了外键服务
注意:“行锁”的使用是有条件的,即where 查询的关键字一定被上了索引,且一定要明确(不能用模糊查询)。
如果不满足,这两个条件InnoDB还是会锁住全表。
2.Innodb不会保存行数,使用count(*)时,会搜索全表。
3.Innodb由聚集索引和辅助索引(非聚集索引)构成,但必须有一个聚集索引,且默认与主键绑定。
建表的时候可以不显示的指定主键,但是则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,
如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
4.Innodb的聚集(主键)索引为B+Tree,其余为B-Tree
MyISAM与InnoDB构成上的区别
(1)每个MyISAM在磁盘上存储成三个文件:
第一个文件的名字以表的名字开始,扩展名指出文件类型,.frm文件存储表定义。
第二个文件是数据文件,其扩展名为.MYD (MYData)。
第三个文件是索引文件,其扩展名是.MYI (MYIndex)。
(2)基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB
适用场景:
MyISAM适合:
(1)做很多count 的计算;
(2)插入不频繁,查询非常频繁,如果执行大量的SELECT,MyISAM是更好的选择;
(3)没有事务。
InnoDB适合:
(1)可靠性要求比较高,或者要求事务;
(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建;
(3)如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表;
(4)DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的 删除;
(5)LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
参考网址:https://blog.csdn.net/xlgen157387/article/details/68978320#commentBox