相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  MERGE 表的优点和缺点

18.7.1 MERGE 表的优点和缺点

MERGE 表可以帮助您解决以下问题:

  • 轻松管理一组日志表。例如,您可以将来自不同月份的数据放入不同的表中,使用 myisampack 压缩其中一些表,然后创建一个 MERGE 表将它们作为一个表使用。

  • 获得更快的速度。您可以根据某些条件拆分大型只读表,然后将各个表放在不同的磁盘上。以这种方式构建的 MERGE 表比使用单个大型表要快得多。

  • 执行更高效的搜索。如果您确切知道要查找的内容,则可以在某些查询的单个基础表中进行搜索,而对其他查询则使用 MERGE 表。您甚至可以拥有许多使用重叠表集的不同 MERGE 表。

  • 执行更高效的修复。修复映射到 MERGE 表的单个较小表比修复单个大型表更容易。

  • 立即将多个表映射为一个表。 MERGE 表不需要维护自己的索引,因为它使用各个表的索引。因此,创建或重新映射 MERGE 表集合的速度 非常快。(即使没有创建索引,您仍然必须在创建 MERGE 表时指定索引定义。)

  • 如果您有一组表,您可以根据需要从中创建一个大表,则可以改为根据需要从中创建一个 MERGE 表。这要快得多,并且可以节省大量磁盘空间。

  • 超过操作系统的文件大小限制。每个 MyISAM 表都受此限制的约束,但 MyISAM 表的集合不受此限制的约束。

  • 您可以通过定义映射到该单个表的 MERGE 表来为 MyISAM 表创建别名或同义词。这样做对性能的影响应该不大(每次读取只会导致几次间接调用和 memcpy() 调用)。

MERGE 表的缺点是:

  • 对于 MERGE 表,您只能使用相同的 MyISAM 表。

  • 某些 MyISAM 功能在 MERGE 表中不可用。例如,您无法在 MERGE 表上创建 FULLTEXT 索引。(您可以在基础 MyISAM 表上创建 FULLTEXT 索引,但您无法使用全文搜索搜索 MERGE 表。)

  • 如果 MERGE 表是非临时的,则所有基础 MyISAM 表都必须是非临时的。如果 MERGE 表是临时的,则 MyISAM 表可以是临时表和非临时表的任意组合。

  • MERGE 表比 MyISAM 表使用更多的文件描述符。如果 10 个客户端正在使用映射到 10 个表的 MERGE 表,则服务器将使用 (10 × 10) + 10 个文件描述符。(10 个客户端各使用 10 个数据文件描述符,客户端之间共享 10 个索引文件描述符。)

  • 索引读取速度较慢。当您读取索引时,MERGE 存储引擎需要对所有基础表执行读取操作,以检查哪个表与给定的索引值最匹配。要读取下一个索引值,MERGE 存储引擎需要搜索读取缓冲区以查找下一个值。只有当一个索引缓冲区用完时,存储引擎才需要读取下一个索引块。这使得 MERGE 索引在 eq_ref 搜索中速度慢得多,但在 ref 搜索中速度差别不大。有关 eq_refref 的更多信息,请参见 第 15.8.2 节,“EXPLAIN 语句”