数据库中常见的两种引擎 myISAM和innoDB 他们之间还是有所不同的
isam 是索引顺序存取方法,是一种索引机制,能高效的访问数据行
而myISAM是mysql基于isam 的扩展 的引擎,它不支持事务和外键,它使用的是表级锁,select,update,delete,insert语句都会给表自动加锁,这样会导致多线程并发运行时的处理效率较慢
.
innoDB 最大的特点就是它支持事务和外键,使用行级锁,如果有大量的update和insert等操作,建议使用
从以下几个方面讲
.1、文件存储形式
isam 属于堆表,一般有三种文件存储,(数据文件.MYD,表义文件.frm,和索引文件.MYI
),并且支持三种不同的文件形式
- 静态表(默认 但是注意数据末尾不能有空格,会被去掉)
- 动态表
压缩表
innoDB 属于可以是表共享 和多表空间存储
表共享是所有的表文件和索引文件.frm
都存放在一个表空间中,一个表空间可以有多个文件
如果是多表空间存储,每个空间存储一个表文件和索引.ibd
innodb在主存中建立高速缓存池,用于高速缓存数据文件和索引文件,所以需要的内存空间较大
.2、移植性
myisam 是存储于文件中,跨平台移植较为方便 innoDB是拷贝数据文件,当数据量大的时候就不方便
.3、事务的支持
myisam 不支持事务和外键
innoDB 支持事务和外键,有事务回滚和恢复作用
.4、锁的粒度
myisam 支持表级锁,在curd操作时会给整张表上锁
innoDB支持的是行级锁,提高了并发操作的性能
.5、全文索引
myisam :支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
应用场景:
1).MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
2).InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。
ACID事务:四大特性