在我的情况下哪个MySQL分区是正确的?

时间:2015-12-03 11:38:13

标签: mysql bigdata partitioning

我们正在运营广告网络并且最近遇到了一些性能问题。

制表问题的表格是表格"点击"列: click_id intaffiliate_id intcampaign_id intcountry_id inttime datetime

我们所有的Reads和Inserts在WHERE子句中都有country_id。

事实上,来自一个国家/地区的点击总是会阻止其他所有国家/地区的完整表格。这不是必要的,并且会大大降低我们的表现。

亲爱的MySQL专业人士,我是否理解将country_id上的点击表分区对我们来说是一个很好的解决方案?

我在mysql manual

中读到过它

但我不确定哪种分区类型适合我们的需要。

你会推荐哪一个?为什么?

1 个答案:

答案 0 :(得分:0)

请勿使用PARTITION,因为您认为它可能会加快速度。它赢了。

只有4个案例(我知道)PARTITIONing将加速一个系统。我的blog详细介绍了丢弃的旧版本#34;数据作为有用案例之一,另外提到其他3。

我希望您的country_id是2字节"国家/地区代码"而不是4字节INT

那是一个click_id

通常,高流量计数器(例如,点击计数器)应该在一个单独的表中,可能只有一个id和一个计数器。这样可以减轻庞大的主表的负担并避免某些类别的锁定。

我可以看到 no 用于country_id上的分区。

" 7天加上'年龄'" - 这有问题。明天你会想要将一天的数据转移到 big " old"划分。这涉及REORGANIZE PARTITION,它将复制所有"更早的"过度。太慢,并阻止整个表。我已经这样做了,但我必须确保有一个"维护窗口"在此期间,我可以做到。

  

我们所有的Reads和Inserts在WHERE子句中都有country_id。

让我们看一些典型的SELECTs。他们总是有GROUP BY day吗?如果是这样,那么可能需要每天的汇总表。这将极大地卸载Fact表上的SELECT活动,并将其移动到更小,更好的索引摘要表中。 another blog