MySQL有不少数据引擎,但是常用就两个,MyISAM (米色木)和 InnoDB
摘自其他文档
两种存储引擎的大致区别表现在:
、(事务支持不同)InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。
2、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。
3、InnoDB支持外键,MyISAM不支持。
4、从MySQL5.5.5以后,InnoDB是默认引擎。
5、InnoDB不支持FULLTEXT类型的索引。
6、InnoDB中不保存表的行数,如select count() from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含where条件时MyISAM也需要扫描整个表。
7、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。
8、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。
9、(锁粒度)InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like ‘%lee%’),MyISAM表锁。
10、(存储空间)InnoDB既缓存索引文件,又缓存数据文件,MyISAM 只能缓存索引文件。
关于MyISAM与InnoDB选择使用
MYISAM和INNODB是Mysql数据库提供的两种存储引擎。两者的优劣可谓是各有千秋。INNODB会支持一些关系数据库的高级功能,如事务功能和行级锁,MYISAM不支持。MYISAM的性能更优,占用的存储空间少。所以,选择何种存储引擎,视具体应用而定:
但要注意,INNODB的行级锁是有条件的。在where条件没有使用主键时,照样会锁全表。比如DELETE FROM mytable这样的删除语句。
MYISAM索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于INNODB。压缩后的索引也能节约一些磁盘空间。MYISAM拥有全文索引的功能,这可以极大地优化LIKE查询的效率。
现在一般都是选用innodb了,主要是myisam的全表锁,读写串行问题,并发效率锁表,效率低myisam对于读写密集型应用一般是不会去选用的。