InnoDB与MyISAM的对比

为了方便管理,人们把连接管理,查询缓存,语法解析,查询优化这些不涉及真实数据存储的功能划分为MySQL Server的功能,把真是存取数据的功能划分为引擎功能。 所以在MySQL Server完成查询优化后,只需要按照引生成的执行计划,调用引擎提供的API,获取到数据返回给客户端就可以了。 存储引擎就是指表的类型,以前叫做表处理器,后来改名为存储引擎,它的功能就是接受上层传下来的命令,对数据进行提取获取写入操作。


1.查看表的引擎

show engines;

m4du05or.png


2.设置系统默认存储引擎

2.1 查看默认存储引擎

show variables like 'storage_engine'; 或者 select @@default_storage_engine; m4due3qz.png

2.2 设置默认存储引擎

set DEFAULT_STORAGE_ENGINE(注意大写) = InnoDB; m4duehws.png 或者修改my.cnf default-storage-engine=InnoDB systemctl mysqld restart.service

3.设置表的存储引擎

3.1 创建表时指定存储引擎

creat table 表名 ( 创建语句 )engine=存储引擎名;

3.2 修改表的存储引擎

alter table 表名 engine = 存储引擎名


4.引擎介绍

4.1 InnoDB引擎:具备外键支持功能的事物的存储引擎

● InnoDB支持事物。 ● MySQL5.5版本之前默认是MyISAM,之后,默认存储引擎是InnoDB。 ● 除了增加和查询外,还需要修改和删除的,那么,应当优先使用InnoDB引擎。 ● 除非有特殊原因需要使用其他引擎,否则应当优先使用InnoDB引擎。 ● InnoDB是为处理巨大数据量的最大性能设计 ○ 在8.0前的版本,字典数据以元数据文件,非事物表等存储,现在这些文件在8.0中都被删除了,比如:.frm,.idb,.par,.trn,.isl,.opt ● 对比MyISAM引擎,InnoDB写的效率差一些,并且占用更高的磁盘空间以保存索引和数据。 ● 对比MyISAM引擎,MyISAM只缓存索引,不缓存数据,InnoDB缓存数据和索引,对内存要求高,而且内存大小对性能有决定性影响。

  • 数据文件结构 ● 表名.frm ---存储表的结构 ● 表名.idb ---存储表的数据和索引

  • InnoDB的优势 操作便利,提高了数据库的性能,维护成本低。 如过由于硬件或者软件问题导致数据库崩溃,那么再重启服务器之后不需要进行额外操作,InnoDB的崩溃恢复功能会自动将之前提交的内容定型,然后撤销没有提交的进程,重启后继续从崩溃的节点执行。


4.2MyISAM引擎:主要的非事物处理存储引擎

● MyISAM提供了大量的特性,包括全文索引,压缩,空间函数(GIS)等,但MyISAM不支持事物,行级锁,外键,崩溃后无法恢复。 ● 5.5之前的默认引擎。 ● 优势是访问速度快。 ● 针对数据统计有额外的常数存储,所以count(*)的查询效率很高。 ● 主要应用对事物没有要求或者以SELECT,INSERT为主的应用。 数据文件结构 ● 表名.frm ---存储表的结构 ● 表名.MYD ---存储表的数据 ● 表名.MYI ---存储表的索引

4.3 MyISAM和InnoDB的区别

对比项 MyISAM InnoDB
外键 不支持 支持
行锁 不支持 支持
表锁 支持 支持
缓存 只缓存索引 缓存索引和数据
自带系统表示用 Y
关注点 性能:节省资源,简单业务 事物:并发写,事物,更大资源
默认安装 Y Y
默认使用 5 .5之前