一、前言
本文主要介绍MySQL主要存储引擎MyISAM和InnoDB的区别,特性,优缺点,应用等内容。同时举例介绍了MyISAM和InnoDB引擎的修改切换方法
二、MySQL存储引擎种类
MySQL存储引擎有MyISAM、InnoDB、MERGE、MEMORY、FEDERATED、ARCHIVE、CSV、BLACKHOLE等
在此主要介绍今天我们常用的MyISAM
和InnoDB
1、MyISAM
MyISAM管理非事务表,它提供高速存储和检索,以及全文搜索能力,MySQL 5.5版本以前,它是默认引擎。
MyISAM主要特性:
-
不支持事务,宕机时会破坏表;
-
使用较小的内存和磁盘空间,执行速度比 InnoDB类型更快;
-
基于表的锁,表级锁;
-
mysql 只缓存index索引, 数据由OS缓存。
MyISAM适用于:
-
日志系统
-
大部分都是读的操作。 比如:门户网站,企业站点,个人博客,www.hello2099.com等
-
没有事务 ,低并发的应用。
2、InnoDB
MySQL发展到今天,InnoDB引擎已经作为绝对的主力,除了像大数据量分析等比较特殊领域需求外,它适用于众多场景。InnoDB是MySQL下使用最广泛的引擎,它是基于MySQL的高可扩展性和高性能存储引擎,从5.5版本开始,它已经成为了默认引擎。
InnoDB主要特性:
-
支持ACID,简单地说就是支持事务完整性、一致性;
-
支持行锁,以及类似ORACLE的一致性读,多用户并发;
-
独有的聚集索引主键设计方式,可大幅提升并发读写性能;
-
支持外键;
-
支持崩溃数据自修复;
InnoDB适用于:
-
需要事务的应用
-
高并发的应用
-
需要自动灾难恢复的应用
-
较快速的基于主键的操作的应用
注意问题
-
所有InnoDB数据表都创建一个和业务无关的自增数字型作为主键,对保证性能很有帮助;
-
杜绝使用text/blob,确实需要使用的,尽可能拆分出去成一个独立的表;
-
时间建议使用 TIMESTAMP 类型存储;
-
IPV4 地址建议用 INT UNSIGNED 类型存储;
-
性别等非是即非的逻辑,建议采用 TINYINT 存储,而不是 CHAR(1),bool;
-
存储较长文本内容时,建议采用JSON/BSON格式存储;
3、MyISAM与InnoDB的区别
-
MyISAM不支持事务,InnoDB是事务类型的存储引擎当我们的表需要用到事务支持的时候,那肯定是不能选择MyISAM了。
-
MyISAM只支持表级锁, InnoDB支持行级锁和表级锁默认为行级锁。
表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许。
-
MyISAM引擎不支持外键,InnoDB支持外键。
-
InnoDB是为处理巨大数据量时的最大性能设计,它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。
-
MyISAM支持全文索引(FULLTEXT),InnoDB不支持。
-
MyISAM引擎的表的查询、更新、插入的效率要比InnoDB高
三、如何选择合适的存储引擎
选择标准可以分为:
(1)是否需要支持事务;
(2)是否需要使用热备;
(3)崩溃恢复:能否接受崩溃;
(4)是否需要外键支持;
然后按照标准,选择对应的存储引擎即可
参考博客: