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

kjthegm6  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(422)

嗨,我有一个表,其中包含超过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 不是唯一的,因为它是外键。

lxkprmvk

lxkprmvk1#

简而言之:不要分区。而是处理查询。
长话短说:
注: FOREIGN KEYs 不允许进入 PARTITIONed table。但是,它们生成的索引是允许的。
要绕过错误消息,只需将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个字节(缩小表的大小可能有助于提高性能。
给我们看一个缓慢的报告;我们可以解释如何在没有分区的情况下加速它。

相关问题