MyISAM是MySQL默认存储引擎。每个表最大支持_4.295E+09条记录以及可以支持64个索引字段,二者也可能因不同版本而更大。
MyISAM也支持对Text/Blo字段的全文索引。MyISAM类型的数据库的表和索引是分离的,文件扩展名分别以.MYD和.MYI,这些文件可以直接复制到其他MySQL数据库中使用。MyISAM支持表锁定
InnoDB为处理海量数据时最大性能而设计。最大表空间可以是整个文件或磁盘。支持事务处理,外键和行级锁。(在行级锁上应该注意,InnoDB只对where为主键有效,非主键的都会锁全表)
如果需要对表的插入、更新或删除大于查询,选择InnoDB
如果需要设计成关系型数据库,选择InnoDB
如果需要做全文搜索,选择MyISAM
如果有磁盘空间的限制,选择MyISAM
如果在不清楚其他的情况下,选择MyISAM
支持的级别有三种:表锁定、块锁定和行锁定
***************************************************************
以下是一些细节和具体实现的差别:
1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB 中不保存表的具体
行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单
的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。
阅读(655) | 评论(0) | 转发(0) |