MySQL的“分区”与分裂数据到不同的表

我们有一个名为posts_content的mysql表.

结构如下:

CREATE TABLE IF NOT EXISTS `posts_content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `post_id` int(11) NOT NULL,
  `forum_id` int(11) NOT NULL,
  `content` longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=79850 ;

问题在于桌子越来越大了.数千兆字节的数据(我们有一个搜寻引擎).

我们每天都在向表中插入数据,但很少检索数据.现在,随着桌子变得越来越大,它变得越来越难以处理桌子.

我们讨论了两种可能性

>使用MySQL的分区功能通过forum_id(约50个Forum_id)对表进行分区,因此大约会有50个分区.请注意,即使每个分区最终都将再次增长到数十亿字节的数据,甚至可能最终需要自己开车
>为每个forum_id创建单独的表,并按此拆分数据.

我希望我已经清楚地解释了这个问题.从长远来看,我需要知道的是上述两个中的哪一个是更好的解决方案.什么是副词显示在两种情况下.

感谢您

解决方法:

区别在于,在第一种情况下,您让MySQL进行分片,而在第二种情况下,您是自己做的. MySQL不会扫描任何不包含数据的分片,但是,如果您有一个查询WHERE forum_id IN(…),则可能需要扫描多个分片.据我所记得,在这种情况下,操作是同步的,例如MySQL一次查询一个分区,您可能想要异步实现它.通常,如果您自己进行分区,则更加灵活,但是对于简单分区,基于forum_id,如果一次仅查询1个forum_id,则MySQL分区是可以的.

我的建议是阅读有关分区的MySQL文档,尤其是restrictions and limitations部分,然后再决定.

上一篇:[转帖]虚拟机VMWARE上ORACLE License 的计算


下一篇:多个表或使用分区?