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_ref
和ref
的更多信息,请参阅 第 15.8.2 节“EXPLAIN 语句”。