在mysql中使用ENGINE作为MRG_MYISAM是否有任何优势

时间:2012-07-21 05:51:44

标签: php mysql database database-design

我正在使用google adwords等跟踪网站。我只做修改。在那个站点我已经看到他们正在为每个月创建表并将该表合并为一个表,这些表存储有关点击和搜索详细信息的信息以及包含记录的crores的合并表。对于查询,他们只使用了合并表,有记录的crores。使用这样的表是否有任何优势?查询执行时间超过10分钟。

2 个答案:

答案 0 :(得分:5)

优点如下,如果您没有以下优点,请不要使用它。

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

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

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

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

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

如果您有一组表,您可以根据需要从中创建一个大表,您可以根据需要从中创建一个MERGE表。这速度更快,节省了大量磁盘空间。

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

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

您可以在basic info linkadvantages disadvantages link上了解详情。

答案 1 :(得分:4)

MRG_MYISAM仅适用于MyISAM表,这些表本身不是表的第一个选项。你通常会去InnoDB表。

MRG_MYISAM引擎是在MySQL支持视图和分区之前发明的。范围分区(例如每月分区)很可能是你想要的。

在查询方面,分区对用户是透明的,但仍然使用pruning,以便只从查询的所选分区中读取,从而对其进行优化。

我建议您使用InnoDB表格,然后查看range partitioning。 MRG_MYISAM和MyISAM仍在使用中。他们可以为你工作。只是MyISAM引入了很多麻烦(没有崩溃恢复,表级锁定,更多...),这已经多次出了问题。