全部博文(25)
分类: Mysql/postgreSQL
2011-05-01 23:52:42
主要参考《PHP与MySQL程序设计》第三版的第28章
MyISAM
这个存储引擎无法处理事务。它主要适用于
- 查询密集的表。在大数据量中查询速度很快。
- 插入密集的表。允许同时查询和插入数据,很适合管理邮件和Web服务器日志数据。
MyISAM已被做了很多优化,被分为三种类型:静态、动态和压缩。
- 静态类型。如果所有表列都是静态的(即不使用xBLOB, xText或VARCHAR数据类型),就是静态类型。静态类型的核心思想是以空间换时间,都是定长的数据类型,所以访问肯定比变长数据类型更快,也更优化,只不过空间利用率比较低。
- 动态类型。如果至少有一个表列是动态的(即使用xBLOB, xText或VARCHAR数据类型),就是动态类型。动态类型的空间利用率较高,但是如果变长数据类型的数据发生了变更,可能需要移动数据的位置,导致有碎片的产生,随着数据碎片的增加,会导致数据访问性能的下降。
- 压缩类型。如果某些表在整个生命周期中都是只读的,可以将其转化为MyISAM压缩表来节省空间。
InnoDB
这是一个健壮的事务性数据引擎,并引入了行级锁定和外键约束。它主要适用于
- 更新密集的表。特别适合处理多重并发的更新请求。
- 事务。是唯一支持事务的MySQL标准数据引擎。
- 自动灾难恢复。能够自动从灾难中恢复。
Memory
即原来的Heap数据引擎,数据存储在内存中,当mysqld守护进程崩溃时,所有数据会丢失。它主要适用于
- 可以忽略的数据。
- 临时的数据。
Merge
一般用于存储时间特定的数据,如航班信息、销售日志或者服务器日志等。可以将数据按照不同的月份分成多张表,每个表可以使用前面所述的MyISAM引擎,这样在查询和插入式就比较方便,不用写很复杂的SQL语句。(PS:具体怎么用?)
还有其他几种数据引擎,如Csv,Archive,Federated等等。