2013-06-30 103 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