innodb介绍
InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。
innodb特点
1.事务型数据库的首选引擎,支持ACID事务,支持行级锁定。
2.InnoDB是为处理巨大数据量时的最大性能设计。
3.InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。
4.InnoDB存储它的表&索引在一个表空间中,表空间可以包含数个文件(或原始磁盘分区)。InnoDB 表可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上。
5.InnoDB默认地被 包含在MySQL二进制分发中。
6.自适应哈希索引:InnoDB会监控对表上各索引页的查询执行情况,如发现建立哈希索引可以提升速度,则建立哈希索引,这是过程不需要用户干预。
myisam介绍
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。
myisam特点
虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。
它们之间的区别
首先大家可以看一下下面这张图
通过上面的观察,可以发现
对锁的理解
这里我对锁做一个我自己的理解:锁可以看做银行的ATM机,当一个人进去后,其他人就被隔离在外面了,但是表锁有个缺点,如果系统出错导致ATM机的进入失败就会产生连锁效应,所有的机器会自行锁定,无法使用。而行锁就不一样了,它是局部的瘫痪,互不影响。
总结优缺点
myisam:
优点:查询数据相对较快,适合大量的select,可以全文索引。
缺点:不支持事务,不支持外键,并发量较小,不适合大量update
innodb:
优点:支持事务,支持外键,并发量较大,适合大量update
缺点:查询数据相对较快,不适合大量的select
如何选择innodb和myisam
MYISAM和INNODB是Mysql数据库提供的两种存储引擎。两者的优劣可谓是各有千秋。INNODB会支持一些关系数据库的高级功能,如事务功能和行级锁,MYISAM不支持。MYISAM的性能更优,占用的存储空间少。所以,选择何种存储引擎,视具体应用而定。
如果你的应用程序一定要使用事务,毫无疑问你要选择INNODB引擎。但要注意,INNODB的行级锁是有条件的。在where条件没有使用主键时,照样会锁全表。比如DELETE FROM mytable这样的删除语句。
如果你的应用程序对查询性能要求较高,就要使用MYISAM了。MYISAM索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于INNODB。压缩后的索引也能节约一些磁盘空间。MYISAM拥有全文索引的功能,这可以极大地优化LIKE查询的效率。
现在一般都是选用innodb了,主要是myisam的全表锁,读写串行问题,并发效率锁表,效率低myisam对于读写密集型应用一般是不会去选用的。