-
MySQL教程之MySQL两种引擎的比较
MyISAM,InnoDB主要区别:
1.MyISAM是非事物安全的,InnoDB是事物安全的。
事物安全的特点为更安全,遇到问题会自动恢复或从备份加事物日志回复,如果更新失败,你的所有改变都变回原来。
非事物安全的优点为更快,所需的磁盘空间更小,执行更新时需要的内存更小,但是所有发生的改变都是永久的。
2.MyISAM锁的粒度是表级的,InnoDB支持行级锁以及表级,默认情况下是采用行级锁。
数据库引擎具有多粒度锁定,允许一个事务锁定不同类型的资源。 为了尽量减少锁定的开销,数据库引擎自动将资源锁定在适合任务的级别。 锁定在较小的粒度(例如行)可以提高并发度,但开销较高,因为如果锁定了许多行,则需要持有更多的锁。 锁定在较大的粒度(例如表)会降低了并发度,因为锁定整个表限制了其他事务对表中任意部分的访问。 但其开销较低,因为需要维护的锁较少。
3.MyISAM支持全文类型索引,InnoDB不支持(之前)。
mysql索引有四种类型:主键索引、唯一索引、普通索引和全文索引。通过给字段添加索引可以提高数据的读取速度,提高项目的并发能力和抗压能力。索引优化是mysql中的一种优化方式。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
主键索引: 主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键。
唯一索引: 索引列的所有值都只能出现一次,即必须唯一,值可以为空。
普通索引 : 基本的索引类型,值可以为空,没有唯一性的限制。
全文索引: 全文索引的索引类型为FULLTEXT。全文索引可以在varchar、char、text类型的列上创建。可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。MyISAM支持全文索引,InnoDB在mysql5.6之后支持了全文索引。
4.InnoDB支持外键,MyISAM不支持。
应用场景(简单概括):
MyISAM管理非事物表,提供高速存储和检索以及全文搜索的能力,如果在应用中执行大量的select操作,应选用MyISAM。
InnoDB用于事物处理,具有ACID(原子性,一致性,隔离性,持久性)事物支持等特性,如果在应用中大量使用insert和update操作,应选用InnoDB。
当然具体的选用还是要看具体的项目需求来定,不能简单的只看这几个方面。