Mysql分区 - 如何对包含唯一列的表进行列表分区?

时间:2016-01-21 05:44:23

标签: mysql database partitioning database-partitioning

我在做mysql列表分区。我的表格数据如下

for(var i:int = 1; i <= 5; i++)
    {
        var file:File;
        file = File.documentsDirectory.resolvePath("myApp/" + this["folder" + i] + "/playinfo.txt");

        var stream:FileStream = new FileStream();
        stream.open(file, FileMode.WRITE);
        stream.writeUTFBytes("something");
        stream.close();
    }

在上表---------------------------------------- id | unique_token | city | student_name | ---------------------------------------- 1 | xyz |mumbai| sanjay | ----------------------------------------- 2 | abc |mumbai| vijay | ---------------------------------------- 3 | def | pune | ajay | ---------------------------------------- 列中有一个唯一键,我想用city列进行列表分区。根据mysql文档,每个分区列必须是表的每个唯一键的一部分,因此为了使用city列进行列表分区,我必须创建新的唯一键unique_token

现在问题是unique_token列应该是唯一的,如果我在表中插入两行unique_key(unique_token,city),那么这些行将被插入到表中,但是unique_token列根本不会是唯一的

我想知道如何在此表上进行列表分区而不会在unique_token列中有重复数据?

2 个答案:

答案 0 :(得分:2)

MySQL的PARTITION实施存在局限性。特别是,没有FOREIGN KEYs和没有UNIQUE密钥,除非它们恰好包含&#34;分区键&#34;。存在这些限制是因为实施它们的成本不可接受。反过来,这是由每个分区本质上是一个单独的表&#39;以及它自己的索引引起的。没有&#34;索引&#34;跨越整个分区集。这样一个全球指数&#39;会使FK和UNIQUE密钥可行且高效。 可能版本为5.8。

与此同时,让我更改您的问题&#34; 如何进行LIST分区......&#34;到&#34; 为什么进行LIST分区?&#34;。对于PARTITION BY LIST,我知道没有效用 - 不是表现,不是方便,不是别的。如果您有理由想要这样做,解释。我很乐意改变我对分区的负面态度。 (我知道PARTITION BY RANGE只有4个用例,但那是另一个主题。)

答案 1 :(得分:0)

最好为(unique_token和city)列提供复合主键

  

alter table table_name add constraint constraint_name primary      key(unique_token和city)。