Schema的优化和索引 - 关于存储引擎的简单记录
这一章的结束,我们来说一下关于设计模型的存储引擎的选择,这些你应该牢记。我们不会全面的介绍存储引擎,目标就是列出一些影响数据模型设计的一些关键性因素。
MyISAM存储引擎 表锁(Table locks) MyISAM是表一级的锁。小心地是这个不会成为一个瓶颈。 没有自动数据恢复(No automated data recovery) 如果MySQL服务器挂了或者电源关闭。你应该在使用表之前来修复MyISAM表。如果有个大表,这个过程可能会持续几个小时。 不支持事物(No transactions) MyISAM不支持事物。事实上,MyISAM表不能保证一个单独的语句会执行完成。如果一个错误发生在多个UPDATE之中,一些行被更新而另外的行并不会更新。 只有索引会被缓存(Only indexes are cached in memory) 在MySQL进程内部,关键的缓冲区中,MyISAM只会缓存索引。操作系统缓存了表的数据,因此在MySQL5.0中,要想获取数据,就需要操作系统的调用。这个过程消耗是较大的。 压缩存储(Compact storage) 每一行都是紧挨着的,因此需要的硬盘就会小并且全表扫描就会很快。 Memory存储引擎 表锁(Table locks) 像MyISAM表一样,Memory表支持表锁。这不是个问题,因为语句都是在内存中执行的。非常快。 没有动态的行(No dynamic rows) Memory表不支持动态(比如,变量的长度)行,因此它们不支持BLOB,TEXT字段。一个VARCHAR(5000)转为CHAR(5000)-如果大部分数据都是小的话,就会浪费大量内存。 Hash索引是默认的索引类型(Hash indexes are the default index type) 不像其他的存储引擎,它的默认索引类型是hash。 没有索引统计(No index statistics) Memory表不支持索引统计,因此可能对于复杂的查询,执行很不理想。 重启动后内容丢失(Content is lost on restart) Memory不会持久化任何数据。因此服务器重启后,数据都会丢失,但表还是存在的。 InnoDB存储引擎 事物(Transactional) InnoDB支持事物,并且支持4个级别的事物隔离级别。 外键(Foreign keys) MySQL5.0,InnoDB是唯一支持外键的存储引擎。其他存储引擎在CREATE TABLE时可以创建外键,但是不会约束。一些第三方引擎,比如solidDB以及PBXT,在存储引擎级别支持它们。MySQL AB准备在服务器级别支持外键。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |