Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  MERGE Table Advantages and Disadvantages

18.7.1 MERGE 表的优点和缺点

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

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

  • 获得更快的速度。您可以根据某些标准将大型只读表分割成多个小表,并将每个表存储在不同的磁盘上。这样结构化的 MERGE 表可能比使用单个大表要快。

  • 执行更高效的搜索。如果您知道正在查找的是什么,您可以对某些查询只搜索一个 underlying 表,并使用 MERGE 表对其他查询。甚至可以有多个不同的 MERGE 表,它们使用重叠的表集。

  • 执行更高效的修复。修复单个小表比修复单个大表要容易得多。

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

  • 如果您需要根据需求创建一个大表,从而可以将一组表格合并到一个MERGE表中。这是一个非常快速的方法,能够节省大量磁盘空间。

  • 超出操作系统文件大小限制。每个MyISAM表都受到这个限制,但是多个MyISAM表的集合不受影响。

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

MERGE表的缺点是:

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

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

  • 如果MERGE表是非临时的,那么所有underlying MyISAM 表都必须是非临时的。如果MERGE表是临时的,那么MyISAM 表可以是任意的混合(临时和非临时)。

  • MERGE 表使用更多的文件描述符,而不是MyISAM表。如果10个客户端使用一个映射到10个表的MERGE表,服务器使用(10 × 10)+ 10 个文件描述符。(每个客户端10个数据文件描述符和10个索引文件描述符共享于客户端。)

  • 索引读取速度较慢。当您读取一个索引时,MERGE存储引擎需要对所有 underlying 表发出读取请求,以检查哪个表最接近给定的索引值。要读取下一个索引值,MERGE存储引擎需要在读缓冲区中搜索下一个值。只有当一个索引缓冲区被用完时,存储引擎才需要读取下一个索引块。这使得MERGE索引在eq_ref搜索中速度较慢,但是在ref搜索中速度变化不大。关于eq_refref的更多信息,请见第15.8.2节,“EXPLAIN Statement”