在MySQL中使用ENGINE作为MRG_MYISAM有什么优势

use*_*007 1 php mysql database database-design

我正在做一个像google adwords这样的跟踪网站。我只做修改。在那个站点中,我看到他们正在为每个月创建表,并将该表合并为一个表,该表存储了有关点击和搜索详细信息的信息以及合并后的表的记录。合并表,其中包含大量记录。使用这样的表有什么好处吗?查询要花10多分钟才能执行。

Shl*_*ach 6

MRG_MYISAM 仅适用于 MyISAM 表,而 MyISAM 表本身并不是表的第一个选项。您通常会选择 InnoDB 表。

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

就查询而言,分区对用户是透明的,但仍然使用修剪以便仅从查询的选定分区中读取,从而对其进行优化。

我建议您使用 InnoDB 表,并检查范围分区。MRG_MYISAM 和 MyISAM 仍在使用中。他们可以为你工作。只是 MyISAM 引入了太多麻烦(没有崩溃恢复、表级锁定等等……),很多时候是不可能的。


And*_*ner 5

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

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

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

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

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

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

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

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

您可以通过定义映射到单个表的MERGE表来为MyISAM表创建别名或同义词。这样做不会对性能造成任何明显的影响(每次读取仅两次间接调用和memcpy()调用)。

您可以在基本信息链接优点和缺点链接上了解更多信息