15.7.1 MERGEtable 的优缺点
MERGE
table 可以帮助您解决以下问题:
-
轻松 Management 一组日志 table。例如,您可以将不同月份的数据放入单独的 table 中,用myisampack压缩其中的一些,然后创建
MERGE
table 以将它们用作一个 table。 -
获得更高的速度。您可以根据某些条件拆分一个大型只读 table,然后将各个 table 放在不同的磁盘上。这样构造的
MERGE
table 可能比使用单个大 table 要快得多。 -
执行更有效的搜索。如果您确切知道要查找的内容,则可以仅在基础 table 之一中搜索某些查询,而在其他 table 中使用
MERGE
table。您甚至可以拥有许多使用重叠的 table 集的不同MERGE
table。 -
执行更有效的维修。修复 Map 到
MERGE
table 的单个较小的 table 比修复单个较大的 table 要容易。 -
立即将多个 tableMap 为一个。
MERGE
table 不需要维护自己的索引,因为它使用各个 table 的索引。结果,MERGE
个 table 集合创建或重新 Map 的速度非常快。 (即使未创建索引,创建MERGE
table 时仍必须指定索引定义.) -
如果您有一组 table,可以根据需要从中创建一个大 table,则可以根据需要从中创建一个
MERGE
table。这快得多,并节省了大量磁盘空间。 -
超出 os 的文件大小限制。每个
MyISAM
table 都受此限制约束,但不是MyISAM
table 的集合。 -
您可以通过定义 Map 到该单个 table 的
MERGE
table 来为MyISAM
table 创建别名或同义词。这样做不会对性能产生任何明显的影响(每次读取仅两次间接调用和memcpy()
调用)。
MERGE
table 的缺点是:
-
MERGE
table 只能使用相同的MyISAM
table。 -
某些
MyISAM
功能在MERGE
table 中不可用。例如,您不能在MERGE
table 上创建FULLTEXT
索引。 (您可以在基础MyISAM
table 上创建FULLTEXT
索引,但不能使用全文本搜索来搜索MERGE
table.) -
如果
MERGE
table 是非临时 table,则所有基础MyISAM
table 都必须是非临时 table。如果MERGE
table 是临时 table,则MyISAM
table 可以是临时 table 和非临时 table 的任意组合。 -
MERGE
个 table 比MyISAM
个 table 使用更多的文件 Descriptors。如果 10 个 Client 端使用的MERGE
tableMap 到 10 个 table,则服务器使用(10×10)10 个文件 Descriptors。 (10 个 Client 端中的每个 Client 端都有 10 个数据文件 Descriptors,并且 Client 端之间共享 10 个索引文件 Descriptors.) -
索引读取速度较慢。读取索引时,
MERGE
存储引擎需要在所有基础 table 上发出读取,以检查哪个 table 最匹配给定索引值。要读取下一个索引值,MERGE
存储引擎需要搜索读取缓冲区以找到下一个值。仅当一个索引缓冲区用完时,存储引擎才需要读取下一个索引块。这会使MERGE
索引在eq_ref搜索上慢得多,但在ref搜索上却慢很多。有关eq_ref和ref的更多信息,请参见第 13.8.2 节“ EXPLAIN 语句”。