BDB表的特征 |
发布时间: 2012/8/24 17:28:40 |
每个BDB表用两个文件被存在磁盘上。文件的名字用表的名字做开头,并且有一个扩展名来指明文件类型。一个.frm文件存储表定义,一个.db文件包含表数据和索引。 要明确指出你想要一个BDB表,用ENGINE或TYPE表选项来指明:
CREATE TABLE t (i INT) ENGINE = BDB;
CREATE TABLE t (i INT) TYPE = BDB;
BerkeleyDB是用ENGINE或者TYPE选项的BDB存储引擎的“同义词”。 BDB存储引擎提供事务性表,你使用这些表的方法取决于autocommit模式:
· 如果你正运行着,同时随着autocommit的被允许(这是默认的),对BDB表的改变被立即提交并且不能被回滚。
· 如果你正运行着,同时随着autocommit的被禁止,改变不变成永久的直到你执行一个COMMIT语句。作为提交的替代,你可以执行ROLLBACK来忘记改变。
你可以用BEGIN WORK语句开始一个事务来挂起autocommit,或者用SET AUTOCOMMIT=0来明确禁止autocommit。 请参阅13.4.1节,“START TRANSACTION, COMMIT和ROLLBACK语法”。 BDB存储引擎有下列特征: · BDB表可以有多达每表31个索引,每个索引16列,并且1024字节的最大键尺寸。
· MySQL在每个BDB表中需要一个PRIMARY KEY以便每一行可以被唯一地识别。如果你不明确创建一个,MySQL为你创建并维持一个隐藏的PRIMARY KEY。隐藏的键有一个5字节的长度,并且为每个插入的企图而被增加。这个键不出现在SHOW CREATE TABLE或DESCRIBE的输出之中。
· PRIMARY KEY比任何其它索引都要快,因为PRIMARY KEY被与行的数据一起存储。其它索引被存储为键数据+PRIMARY KEY,所以保持PRIMARY KEY尽可能地短以节约磁盘空间并获得更好速度是重要的。
这个行为类似于InnoDB的,在其中较短的primary keys不仅在主索引也在第二索引节约空间 。 · 如果在BDB表中,你访问的所有列是同一索引的一部分或主键的一部分,MySQL可以执行查询而不访问确实的行。在一个MyISAM表中,只有列是同一索引的一部分之时,才可以这么做。
· 连续扫描比对MyISAM表的扫描更慢,因为在BDB表中的数据被存储在B树而不是在分离的数据文件中。 本文出自:亿恩科技【www.enkj.com】 |