Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

18.7.1 MERGE 表优势和缺点

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

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

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

  • 执行更高效的搜索。如果您知道自己正在寻找什么,可以在单个基础表中搜索某些查询,并使用 MERGE 表来搜索其他查询。您甚至可以拥有多个不同的 MERGE 表,它们使用重叠的表集。

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

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

  • 如果您有一个大表的集合,可以根据需要创建一个 MERGE 表。这比创建一个大表要快得多,并且节省了大量的磁盘空间。

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

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

然而,MERGE 表也存在一些缺点:

  • 您只能使用相同的 MyISAM 表来创建 MERGE 表。

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

  • 如果 MERGE 表不是临时的,那么所有基础 MyISAM 表也必须不是临时的。如果 MERGE 表是临时的,那么 MyISAM 表可以是临时的或不是临时的。

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

  • 索引读取速度较慢。当您读取索引时,MERGE 存储引擎需要在所有基础表中读取,以检查哪个表最接近给定的索引值。要读取下一个索引值,MERGE 存储引擎需要搜索读取缓冲区以找到下一个值。只有当一个索引缓冲区用完时,存储引擎才需要读取下一个索引块。这使得 MERGE 索引在 eq_ref 搜索中变得非常慢,但是在 ref 搜索中速度并没有太大影响。有关 eq_refref 的更多信息,请参阅 第 15.8.2 节,“EXPLAIN 语句”