2

我有这张桌子

CREATE TABLE IF NOT EXISTS `posts` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `thread_id` int(10) unsigned NOT NULL,
  `forum_id` tinyint(5) unsigned NOT NULL,
  `cat_id` tinyint(3) unsigned NOT NULL,
  `message` mediumtext collate utf8_unicode_ci NOT NULL,
  `userid` int(10) unsigned NOT NULL,
  `date` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `thread_id` (`thread_id`),
  KEY `userid` (`userid`),
  KEY `date` (`date`),
  KEY `forum_id` (`forum_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3273548 ;

我如何在其上应用分区,我可以使用的最佳分区类型是什么?

查询是

SELECT id,user_id,message FROM posts WHERE thread_id = %

有一些连接

PS:表是 2.5 GiB

  • 对MySQL分区不太了解:(

谢谢你

4

1 回答 1

0

从我的脑海中(对您的应用程序了解不多)我会假设您的最高实体是它的“论坛”,我会为每个“论坛”进行分片。

记住分片并不容易

编辑 1

首先:2.5gb 的数据量并不多,我们使用的表比这大得多。

提示:

  • 检查你的索引
  • 将表单 MyISAM 移动到 InnoDB -> 这将使查询更慢但不会阻塞。
  • 在分片尝试去规范化之前
于 2010-10-31T16:55:25.137 回答