2016-01-21 77 views
0

我在做mysql列表分區。我的表數據如下Mysql分區 - 如何對包含唯一列的表進行列表分區?

---------------------------------------- 
id | unique_token | city | student_name | 
---------------------------------------- 
1 | xyz   |mumbai| sanjay  | 
----------------------------------------- 
2 | abc   |mumbai| vijay  | 
---------------------------------------- 
3 | def   | pune | ajay   | 
---------------------------------------- 

在上表中unique_token列具有唯一鍵,我想要做的列表分區與城市列。根據mysql文檔,每個分區列必須是表的每個唯一鍵的一部分,因此爲了做城市列的列表分區,我必須創建新的唯一鍵爲unique_key(unique_token,city)

現在的問題是,unique_token列應該是唯一的,如果我在表格中插入兩行作爲('xyz','banglore') and ('xyz','pune'),那麼這些行將被插入到表格中,但隨後unique_token列將不會是唯一的。

我想知道如何在這個表上做列表分區而不在unique_token列中有重複的數據?

回答

2

MySQL的PARTITION實現有一些限制。特別是,沒有FOREIGN KEYs和沒有UNIQUE鍵,除非它們碰巧包含「分區鍵」。這些限制的存在是因爲實施它們的成本不可接受。這反過來又是由每個分區實質上是一個單獨的'表',並帶有自己的索引引起的。沒有跨越整組分區的「索引」。這樣的'全球指數'將使FKs和鑰匙可行和高效。這可能進來版本5.8。

同時,讓我改變了你的問題,從「如何LIST分區...」到「爲什麼LIST分區呢?」。我知道沒有效用 - 對於PARTITION BY LIST而言,不是性能,不是方便,也不是其他任何東西。如果你有一個想要做的理由,解釋。我很樂意改變我對分區的相當消極的態度。 (我知道的只有4用例PARTITION BY RANGE,但那是另一個話題。)

+0

這個問題的其他解決方案是什麼? – user2274074

+1

什麼是_original_問題? 「獨特」的限制是道路上的一個顛簸。是什麼導致你考慮​​分區? –

+0

未來我的表中將有大約10億(可能超過這個數據)並從這10億數據中搜索特殊記錄需要時間,因此我選擇分區。我想如果我確實按「城市」列出了分區,然後按名稱搜索特定的學生,特別是「城市」會給我更快的反應。 – user2274074

0

不如給的(unique_token,市)列

的alter table table_name的複合主鍵添加約束constraint_name命令主 鍵(unique_token,市)。

+0

這是行不通的,因爲它仍然會增加(「XYZ」,「班加羅爾」)和(「XYZ」,「普納」 )表中的行,因此unique_token列會有重複的值。 – user2274074