繁体   English   中英

MYSQL使用外键对现有表进行分区

[英]MYSQL partitioning existing table using a foreign key

嗨,我有一个表,其中包含超过200万条记录。 我想使用一个名为venue_id的外键对该表进行分区,这将加快我创建的某些报告的速度。

这是我要分区的表结构的图片。

表结构

我尝试运行此代码:

ALTER TABLE wifi_client_connection
    PARTITION BY KEY(venue_id)
    PARTITIONS 500;

但是我一直收到此错误: A PRIMARY KEY must include all columns in the table's partitioning function

我研究了该错误,并且认为这是因为venue_id不是唯一的,因为它是外键。

简短的回答:不要分区。 而是处理查询。

长答案:

注意: FOREIGN KEYs中不允许PARTITIONed表。 但是,它们生成的索引允许的。

要解决该错误消息,只需将pk更改为

PRIMARY KEY(id, venue_id)

更好的索引集是将两个键替换为

PRIMARY KEY(venue_id, id)  -- gets the clustering effect on venue_id
INDEX(id)   -- keeps `AUTO_INCREMENT` happy.

不要指望从什么(5)INT(5) 所有INTs均为4字节整数。 参见SMALLINT ; 它是2个字节。 (等)缩小表的大小可能有助于提高性能。

向我们显示一份缓慢的报告; 我们可以解释如何在分区的情况下加快速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM