mysql中常见的存储引擎分为两种,一种是innodb,一种是myisam,两者各有千秋,大家可能会问,我们建表的时候应该选择哪种存储引擎合适呢?,下面让我们详细的介绍下两种存储引擎
MyIsam 简介
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。
Innodb 简介
InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。
innodb与myisam的区别:
存储结构
- MyIsam:每个Myisam类型的表在磁盘存储上分为三个文件
- 以.frm结尾的文件,用来存储表定义
- 以.myd结尾的文件,用来存储表中的数据
- 以.myi结尾的文件,用来存储表中的所得
- Innodb:每个innodb类型的表在磁盘存储上分为两个文件
- 以.frm结尾的文件,用来存储表定义
- 以.idb结尾的文件,用来存储表中数据
- MyIsam:每个Myisam类型的表在磁盘存储上分为三个文件
存储空间
- Myisam:可被压缩,存储空间较小,支持三种不同的存储格式:静态表,动态表,还有压缩表,在mysql中有固定的缓冲池(例:show status like ‘key_buffer%’)
- innodb:相对myisam而言,需要更多的内存与存储空间,在mysql中同样也有固定的innodb缓冲池(例:show status like ‘innodb%pool%’)
事务支持(!important)
- myisam:相对而言强调的是性能,对写入操作等要快于innodb,但是并不支持事务
- innodb:提供事务支持,外键支持等高级数据库功能,具备事务,回滚,和较为强大的崩溃修复能力。
表锁差异
- myisam:只支持表级锁,用户在执行DML语句时都会给表自动加锁,对并发请求相对而言支持的较弱,但也有优点就是不会发生死锁。
- innodb:不仅支持表级锁,还支持行级锁,相对而言并发性能要好了很多,但是会造成死锁的发生 ==!。
全文索引
- myisam:在mysql 4.x 之后支持全文索引。
- innodb: 在mysql 5.6.x 之后支持全文索引。
表主键
- myisam:允许没有任何索引和主键的表存在,索引中保存的其实是行的地址
- innodb: 如果没有设置主键或者非空的唯一索引,存储引擎会自动生成一个6字节的主键(用户不可见)。
curd操作
- myisam:如果执行大量的select,delete操作,myisam可能相对更加高效一些
- innodb:相对而言会差一些,如delete from table 在inndb存储引擎中,innodb不会重新创建一张表,而是逐行删除,所以要清空含义大量数据的表,建议使用 truncate table 命令
外键
- myisam:不支持
- innodb:支持
看完上面这些区别,大家对两种存储引擎的不同有了一定的认识,相信对今后如何选择存储引擎有了一些自己的想法,建议为了数据安全和可维护性,大家在今后的工作中一个数据库中只使用一种存储引擎,当然作者本人更倾向于innodb。