Mysql 分区 - 如何对包含唯一列的 table 进行列表分区?
Mysql partition - How to do list partitioning of a table that contains unique column?
我正在做 mysql 列表分区。我的table数据如下
----------------------------------------
id | unique_token | city | student_name |
----------------------------------------
1 | xyz |mumbai| sanjay |
-----------------------------------------
2 | abc |mumbai| vijay |
----------------------------------------
3 | def | pune | ajay |
----------------------------------------
在上面的 table unique_token
列中有一个唯一键,我想用 city 列进行列表分区。根据 mysql 文档,每个分区列都必须是 table 的每个唯一键的一部分,因此为了使用城市列进行列表分区,我必须创建新的唯一键作为 unique_key(unique_token,city)
。
现在的问题是 unique_token 列应该是唯一的,如果我在 table 中插入两行作为 ('xyz','banglore') and ('xyz','pune')
那么这些行将被插入到 table 但是 unique_token 列根本不会是唯一的。
我想知道如何在此 table 上进行列表分区而不在 unique_token 列中有重复数据??
最好为(unique_token 和城市)列提供复合主键
alter table table_name add constraint constraint_name primary
key(unique_token and city).
MySQL 的 PARTITION
实施存在局限性。特别是,没有 FOREIGN KEYs
和 UNIQUE
键,除非它们碰巧包含 "partition key"。这些限制的存在是因为实施它们的成本不可接受。反过来,这是由于每个分区本质上是一个单独的 'table',具有自己的索引。没有 "index" 跨越整个分区集。这样的 'global index' 将使 FK 和 UNIQUE
密钥可行且高效。此 可能 出现在版本 5.8 中。
同时,让我将您的问题从“如何 进行 LIST
分区...”更改为“为什么” LIST
完全分区吗?”。对于 PARTITION BY LIST
,我不知道有什么实用性——不是性能,不是方便,不是其他任何东西。如果您有想要这样做的理由,请 解释。我很乐意改变我对分区的消极态度。 (我知道 只有 4 个用于 PARTITION BY RANGE
的用例,但这是另一个话题。)
我正在做 mysql 列表分区。我的table数据如下
----------------------------------------
id | unique_token | city | student_name |
----------------------------------------
1 | xyz |mumbai| sanjay |
-----------------------------------------
2 | abc |mumbai| vijay |
----------------------------------------
3 | def | pune | ajay |
----------------------------------------
在上面的 table unique_token
列中有一个唯一键,我想用 city 列进行列表分区。根据 mysql 文档,每个分区列都必须是 table 的每个唯一键的一部分,因此为了使用城市列进行列表分区,我必须创建新的唯一键作为 unique_key(unique_token,city)
。
现在的问题是 unique_token 列应该是唯一的,如果我在 table 中插入两行作为 ('xyz','banglore') and ('xyz','pune')
那么这些行将被插入到 table 但是 unique_token 列根本不会是唯一的。
我想知道如何在此 table 上进行列表分区而不在 unique_token 列中有重复数据??
最好为(unique_token 和城市)列提供复合主键
alter table table_name add constraint constraint_name primary key(unique_token and city).
MySQL 的 PARTITION
实施存在局限性。特别是,没有 FOREIGN KEYs
和 UNIQUE
键,除非它们碰巧包含 "partition key"。这些限制的存在是因为实施它们的成本不可接受。反过来,这是由于每个分区本质上是一个单独的 'table',具有自己的索引。没有 "index" 跨越整个分区集。这样的 'global index' 将使 FK 和 UNIQUE
密钥可行且高效。此 可能 出现在版本 5.8 中。
同时,让我将您的问题从“如何 进行 LIST
分区...”更改为“为什么” LIST
完全分区吗?”。对于 PARTITION BY LIST
,我不知道有什么实用性——不是性能,不是方便,不是其他任何东西。如果您有想要这样做的理由,请 解释。我很乐意改变我对分区的消极态度。 (我知道 只有 4 个用于 PARTITION BY RANGE
的用例,但这是另一个话题。)