MySQL 8.0 参考手册  / 第 16 章替代存储引擎  / 16.7 MERGE存储引擎  /  15.7.1 MERGE 表的优点和缺点

15.7.1 MERGE 表的优点和缺点

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

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

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

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

  • 进行更有效的维修。MERGE修复映射到表的单个较小表比修复单个大表 更容易 。

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

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

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

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

表的缺点MERGE是:

  • MyISAM一个表 只能使用相同的MERGE表。

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

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

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

  • 索引读取速度较慢。当您读取索引时, MERGE存储引擎需要对所有基础表发出读取以检查哪一个与给定的索引值最匹配。要读取下一个索引值, MERGE存储引擎需要搜索读取缓冲区以找到下一个值。只有当一个索引缓冲区用完时,存储引擎才需要读取下一个索引块。这会使MERGE索引在搜索时慢eq_ref 很多,但在搜索时不会慢很多 ref。有关eq_ref and的更多信息ref,请参阅 第 13.8.2 节,“EXPLAIN 语句”