我有一張包含50GB數據的表,現在我正試圖在下面的datetime列上進行分區。如何在非主鍵列(MYSQL)中對錶進行分區
CREATE TABLE EDR2 (id varchar(255),appKey varchar(255),clickedTime datetime ,ettId bigint(20),primary key(id),Key `ettId` (ettId),Key `clickedTime_index` (`clickedTime`))
PARTITION BY RANGE (day(clickedTime))
(PARTITION p01 VALUES LESS THAN (2) ,
PARTITION p02 VALUES LESS THAN (3) ,
PARTITION p03 VALUES LESS THAN (4) ,
PARTITION p04 VALUES LESS THAN (5) ,
PARTITION p05 VALUES LESS THAN (6) ,
PARTITION p06 VALUES LESS THAN (7) ,
PARTITION p07 VALUES LESS THAN (8) ,
PARTITION p08 VALUES LESS THAN (9) ,
PARTITION p09 VALUES LESS THAN (10) ,
PARTITION p10 VALUES LESS THAN (11) ,
PARTITION p11 VALUES LESS THAN (12) ,
PARTITION p12 VALUES LESS THAN (13) ,
PARTITION p13 VALUES LESS THAN (14) ,
PARTITION p14 VALUES LESS THAN (15) ,
PARTITION p15 VALUES LESS THAN (16) ,
PARTITION p16 VALUES LESS THAN (17) ,
PARTITION p17 VALUES LESS THAN (18) ,
PARTITION p18 VALUES LESS THAN (19) ,
PARTITION p19 VALUES LESS THAN (20) ,
PARTITION p20 VALUES LESS THAN (21) ,
PARTITION p21 VALUES LESS THAN (22) ,
PARTITION p22 VALUES LESS THAN (23) ,
PARTITION p23 VALUES LESS THAN (24) ,
PARTITION p24 VALUES LESS THAN (25) ,
PARTITION p25 VALUES LESS THAN (26) ,
PARTITION p26 VALUES LESS THAN (27) ,
PARTITION p27 VALUES LESS THAN (28) ,
PARTITION p28 VALUES LESS THAN (29) ,
PARTITION p29 VALUES LESS THAN (30) ,
PARTITION p30 VALUES LESS THAN (31) ,
PARTITION p31 VALUES LESS THAN MAXVALUE);*
,我得到的錯誤: -
***ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function***
我不能創建(ID,clickedTime)複合主鍵,不能刪除主鍵,因爲它將使重複記錄, 我不想在我的代碼中更改任何內容。 所以請建議。
嗯。除非它是主鍵(以及所有其他唯一約束)的一部分,否則不能在列上分區。因此,你不能做你想做的事。您可能需要閱讀以下文檔:http://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-partitioning-keys-unique-keys.html。 – 2015-02-08 14:43:05
嗨,先生,沒關係但我仍然困惑,爲什麼他們不允許分區的非主鍵列或問題與我的分區要求。謝謝。 – 2015-02-08 14:53:34
。 。如果你想使用分區鍵,那麼它需要成爲主鍵的一部分。瞭解這一點需要深入分區。您可以將表複製到具有所需密鑰的另一個結構以及分區。這需要時間,但它會完成你想要的。 – 2015-02-08 15:07:12