嗨,我有一个包含超过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
不是唯一的,因为它是外键。
答案 0 :(得分:0)
简短的回答:不要分区。而是处理查询。
长答案:
注意: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个字节。 (等)缩小表的大小可能有助于提高性能。
向我们显示一份缓慢的报告;我们可以解释如何在没有分区的情况下加快的速度。