MySQL常用的两种存储引擎


mysql有两种存储引擎:InnoDB和MyISAM。mysql5.5之前是默认MyISAM,mysql5.5之后改为InnoDB,可通过修改配置文件中的default-storage-engine,来修改默认引擎。


MyISAM

  1. 每个MyISAM在磁盘是存储为三个文件,第一个文件名以表的名字开始,扩展名为:
.frm 文件存储表定义
.MYD 数据文件的扩展
.MYI 索引文件的扩展
  1. MyISAM类型的表强调访问性能,执行速度比InnoDB更快,如果需要执行大量的select,MyISAM是较好的选择。
  2. MyISAM不支持事务,也不支持外键。
  3. MyISAM只支持到表级锁。
  4. 执行select count(*)form table时,MyISAM只需要读取保存好的行数即可,当语句中含有where条件时,两种表都需要扫描一遍具体的行数。
  5. MyISAM支持全文类型索引。
  6. 对于MyISAM表,AUTO_INCREMENT列可以是组合索引的其他列,插入记录后,自动增长列是按照组合索引到前面几列排序后递增的。

InnoDB

  1. InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。
  2. 如果需要执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表;DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
  3. InnoDB支持事务安全,外键等功能。
  4. InnoDB提供行级锁,同时行锁不是绝对的,当执行SQL语句时,MySQL不能确定要扫描的范围时,InnoDB表统一会锁全表。
  5. InnoD不保存表的具体行数,在执行select count(*) form table时,InnoDB会扫描一遍整个表来计算有多少行。
  6. InnoDB不支持全文索引
  7. 对于InnoDB表,自动增长列必须是索引,如果是组合索引,也必须是组合索引的第一列。

MySQL存储引擎的选择:

MySQL有多种存储引擎:MyISAM、InnoDB、MERGE、MEMORY、BDB等;每种引擎有各自的优缺点,但是常用的主要是MyISAM和InnoDB两个。
主要区别在于:

  1. InnoDB支持事务,MyISAM不支持。
  2. MyISAM适合查询和插入为主的应用,InnoDB适合频繁的修改和安全性较高的应用。
  3. 清空整个表时,InnoDB是一行一行删除效率很低,MyISAM则会重建表。
  4. InnoDB不支持FULLTEXT类型的索引。
  5. InnoDB支持外键,MyISAM不支持。
  6. InnoDB支持行级锁,MyISAM支持表级锁,在进行update时会锁表,并发量相对较小。

参考:http://www.jianshu.com/p/e30ea922e08f

你可能感兴趣的:(MySQL常用的两种存储引擎)