时间:2021-07-01 10:21:17 帮助过:25人阅读
MySQL数据库提供了十三种不同的存储引擎来应对不同的数据处理。大部分使用过MySQL的人应该都知道MySQL所常用的两个存储引擎:MyISAM 和 InnoDB。大多数情况下,MyISAM 是作为MySQL默认的存储引擎而存在的。事实上我们大多数人在使用MySQL的时候都没有去配置存
MySQL数据库提供了十三种不同的存储引擎来应对不同的数据处理。大部分使用过MySQL的人应该都知道MySQL所常用的两个存储引擎:MyISAM 和 InnoDB。大多数情况下,MyISAM 是作为MySQL默认的存储引擎而存在的。事实上我们大多数人在使用MySQL的时候都没有去配置存储引擎而直接采用MySQL默认的MyISAM 。如果你需要在特定的表上面使用特定的存储引擎,你可以使用下面的命令行:CREATE TABLE tablename (column1, column2, [etc...]) ENGINE = [storage_engine].那么什么是数据库引擎呢?
mysql -uroot -p Password: mysql> show engines;这个命令会列出你的服务器所支持的存储引擎列表:
MyISAM 事实上是 ISAM 存储引擎的一个分支。如果你的应用不需要TRANSACTION,也不需要行级别的锁(它只提供表级别的锁),那么这是选择MyISAM是最优方案了。MyISAM 特别适合于INSERT/UPDATE操作少而SELECT 操作多的应用场景。当你的应用需要进行大量的INSERT/UPDATE操作时,你需要考虑是否应该换一个存储引擎,因为表级别的锁会让这个操作造成性能问题。
MyISAM 支持的最大行数为 ~4.29E+09,每个表的索引数目限制为64。MyISAM 同时也为 TEXT/BLOB类型的列提供了全索引支持,这样很方便进行搜索等操作。相对于MyISAM, InnoDB提供了更多特性来提升系统性能。这也导致了InnoDB在初始化的时候会比MyISAM花更多的时间,但是这样带来的好处远比初始化额外花的时间要多。其中一个主要的不同就是InnoDB提供了行级别的锁。这就为并发的 INSERT/UPDATE/DELETE 操作提供了可能,不像MyISAM那样要等一个操作完成才能进行下一个操作。
同时, InnoDB 还提供了外键功能。这可以保证你在往表二插入数据之前表一的相关数据已经存在。而且这还会阻止你在表一中删除表二所依赖的数据。InnoDB还提供了数据的缓存已经在内存和磁盘上建立索引,这样可以大大的提升系统性能。也许对于那些低内存的系统来说,这不是一个理想的解决方案,但是对于内存足够的系统来说就不是问题了。
MERGEBerkeleyDB存储引擎处理事务安全的表,并以哈希为基础的存储系统。这个存储引擎适合快速的读写某些数据,特别是不同key的数据。但是这个存储引擎有不少缺点,比如在没有索引的列上速度很慢。也因为这个原因人们都忽视了它。我还是相信它有它的用武之地。
EXAMPLEEXAMPLE,从MySQL 4.1.3 开始添加的存储引擎。这个存储引擎主要是为程序员服务的。EXAMPLE 提供了创建表的能力,但是无法插入或者查询信息。
ARCHIVE下一集预告:
数据库事务隔离机制及特点;
参考文献:
1、http://www.linux.org/threads/an-introduction-to-mysql-storage-engines.4220/