![](https://csdnimg.cn/release/download_crawler_static/81078636/bg1.jpg)
MYSQL表的类型
MySQL作为当前最为流行的免费数据库服务引擎,已经风靡了很长一段时间,不过也许也有
人对于 MySQL的内部环境不很了解,尤其那些针对并发性处理的机制。今天,我们先了解一
下 MySQL中数据表的分类,以及它们的一些简单性质。
截至目前, MySQL一共向用户提供了包括 DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB 以及 Gemeni
这 7 种表。其中 DBD、InnoDB 属于事务安全类表,而其他属于事务非安全类表。
?
DBD
Berkeley DB(DBD) 表是支持事务处理的表,由 Sleepycat 软件公司开发。它提供 MySQL用户
期待已久的功能 -- 事务控制。事务控制在任何数据库系统中都是一个极有价值的功能,因为
它们确保一组命令能成功地执行或回滚。
HEAP
HEAP表是 MySQL中存取数据最快的表。 这是因为他们使用存储在动态内存中的一个散列索引,
不过如果 MySQL或服务器崩溃,这些内存数据将会丢失。
ISAM
ISAM表是早期 MySQL版本的缺省表类型,直到 MyIASM开发出来。建议不要再使用它。
MERGE
MERGE是一个有趣的新类型, 在 3.23.25 之后出现。 一个 MERGE表实际上是又一个 MyISAM表
的集合,合并而成的一个表,主要是为了效率的考虑,因为这样不仅仅可以提高速度、搜索
效率、修复效率而且还节省了磁盘空间。
MyIASM
MyIASM基于了 IASM代码,应该可以说是 IASM的衍生品,不过增加了不少有用的扩展。它是
MySQL的默认数据 表类型,基于了传统的 ISAM 类型, ISAM 是 Indexed Sequential Access
Method(有索引的顺序访问方法)的缩写,一般来说,它是存储记录和文件的标准方法。与
其他存储引擎比较, MyISAM具有检查和修复表格的大多数工具。 ISAM表格可以被压缩, 而且
它们支持全文搜索,不过它们是事务不安全的,而且也不支持外键。如果事务回滚将会造成
不完全回滚,从而不具备原子性。所以假如忽略事务以及访问并发性的话,并且需要执行大
量的 SELECT检索语句的话, MyISAM将是最好的选择。
MyIASM比较好的原因:
MyIASM表小于 IASM表,所以使用较少资源。
MyIASM表在不同的平台上二进制层可移植。
MyIASM拥有更大的键码尺寸,更大的键码上限。
对于 MyISAM存储引擎来说, 它的读锁和写锁是互斥的, 从而读写操作是串行的。 那么, 一个
进程请求某个 MyISAM表的读锁, 同时另一个进程也请求同一表的写锁, MySQL如何处理呢?
答案是写进程先获得锁。 不仅如此, 即使读请求先到锁等待队列, 写请求后 到,写锁也会插
到读锁请求之前!这是因为 MySQL认为写请求一般比读 ???? 请求要重要。这也正是 MyISAM
表不太适合于有大量更新操作和查询操作应用的原 因,因为,大量的更新操作会造成查询操
作很难获得读锁,从而可能永远阻塞。这种情况有时可能会变得非常糟糕!幸好我们可以通
过一些设置来调节 MyISAM 的调度行为。 通过指定启动参数 low-priority-updates ,使 MyISAM