MyISAM,Memory,InnoDB

MyISAM:

表锁:表级锁。注意不要让它成为瓶颈

不支持自动数据恢复:服务器崩溃或停电后,就应该在使用之前检查和执行可能的修复。

不支持事务:实际上,MyISAM甚至不保证单个命令会完成。如果在多行UPDATE的中途有错误发生,一些行会被更新,而另外一些则不会。

只有索引被缓存在内存中:MyISAM中缓存了MYSQL进程内部的索引,并保存在键缓冲区。操作系统缓存了表的数据,因此在MYSQL5.0中须进行昂贵的系统调用来取得它。

紧密存储:行被紧紧地保存在一起,这样磁盘上的数据就能行到小的磁盘占用和快速的全表扫描。


Memory

表锁:和MyISAM一样,但Memory表上的查询都较快,所以通常不是问题。

不支持动态行:动态行即可变长度行,因此它们根本不支持BLOG和TEXT字段,即使varchar(5000)也会变成char(5000).这样如果大多数值较小,则是巨大的内存浪费。

哈希索引是默认索引类型

没有索引统计

重启后丢失数据:Memory表不会把任何数据持久到磁盘,因此当服务器重启后即使表的定义还在,数据也会丢失。


InnoDB:

事务性:InnoDB支持事务和四种事务隔离级别

外键:在Mysql5.0中,InnoDB是唯一支持外键的存储引擎。另外的存储引擎在CREATE TABLE命令中可以接受外键,但却不会强制执行。一些第三方引擎,比哪SolidDB,也在存储引擎层次支持它。

行级锁:锁设定于行一级,不会向上传递并且也不会阻塞选择----标准选择根本不会设定任何锁,它有很好的并发特性

多版本:InnoDB使用多版本并发控制,这样在默认情况下可能选择读取陈旧的数据。事实上,它的MVCC架构增添了很多复杂的和意料之外的行为。如果使用InnoDB,就应该仔细阅读InnoDB手册。

按主键聚集:所有的InnoDB表都是按主键聚集的。可以在架构设计中运用这一点

所有索引包含主键列:索引按照主键引用行,因此如果不把主键维持得很短,索引就增长得很大。

优化的缓存:InnoDB把数据和内存缓存在缓冲区池里。它也会自动构建哈希索引以加快行读取。

未压缩的索引:索引没有使用前缀压缩,因此可能会比MyISAM表的索引大很多。

数据装载缓慢:在MyISAM5.0中,InnoDB不会特别优化数据加载。它一次构建一行的索引,而不是按照排序进行构建。这会导致数据加载缓慢。

阻塞AUTO_INCREMENT:在Mysql5.1之前的版本中,InnoDB使用了表级锁来产生每个新的AUTO_INCREMENT值。

没有缓存的COUNT(*)值:和MyISAM表或Memory表不同,InnoDB表不会把表的行数保存在表中,这意味着没有WHERE子句的COUNT(*)查询不会被优化掉,并且需要全表或索引扫描。


猜你喜欢

转载自lobert.iteye.com/blog/1673615
今日推荐