2013-06-30 106 views
0

我試圖做一個分區表與以下範圍的功能MySQL表分區與FLOOR功能(分區功能不允許)?

CREATE TABLE `fact_events` (
`event_key` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
`event_type_key` tinyint(3) unsigned NOT NULL, 
`analytic_file_id` bigint(20) unsigned NOT NULL ', 
`sdk_session_id` bigint(20) unsigned NOT NULL, 
`virtual_button_create_id` bigint(20) unsigned NOT NULL C, 
PRIMARY KEY (`event_key`), 
KEY `idx_events_event_type` (`event_type_key`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
    PARTITION BY RANGE(FLOOR(event_key/100000)) 
PARTITION p0 VALUES LESS THAN (0), 
PARTITION p1 VALUES LESS THAN (1), 
PARTITION p2 VALUES LESS THAN (2), 
PARTITION p3 VALUES LESS THAN (3), 
PARTITION p4 VALUES LESS THAN (4), 
PARTITION p513 VALUES LESS THAN MAXVALUE 
) 

我不斷收到

ERROR 1564 (HY000): This partition function is not allowed 

任何想法將受到歡迎 感謝

回答

1

的MySQL記錄了分區功能herefloor()函數似乎有一些特殊的考慮。在這種情況下,我認爲問題可能是分區返回浮點/雙精度結果而不是十進制結果。

這是很容易固定在你的情況,因爲你不需要做除法:

CREATE TABLE `fact_events` (
    `event_key` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `event_type_key` tinyint(3) unsigned NOT NULL, 
    `analytic_file_id` bigint(20) unsigned NOT NULL, 
    `sdk_session_id` bigint(20) unsigned NOT NULL, 
    `virtual_button_create_id` bigint(20) unsigned NOT NULL, 
    PRIMARY KEY (`event_key`), 
    KEY `idx_events_event_type` (`event_type_key`) 
) PARTITION BY RANGE(event_key) (
    PARTITION p0 VALUES LESS THAN (0), 
    PARTITION p1 VALUES LESS THAN (100000), 
    PARTITION p2 VALUES LESS THAN (200000), 
    PARTITION p3 VALUES LESS THAN (300000), 
    PARTITION p4 VALUES LESS THAN (40000000), 
    PARTITION p5 VALUES LESS THAN MAXVALUE 
) 

編輯:

作爲解釋。 floor()返回整數但不一定是整數類型。以下是文檔:

對於精確值數字參數,返回值具有精確值 數字類型。對於字符串或浮點參數,返回值 具有浮點類型。

當你分兩個整數時,你產生一個浮點參數,這不適用於分區。

+0

謝謝,我會用這種方式實現,但你如何用'floor'解釋這個問題? 'floor'不是按照定義返回一個整數? – adam