MySQL表分区与FLOOR功能(不允许分区功能)?

时间:2013-06-30 13:51:04

标签: mysql function range database-partitioning floor

我尝试使用以下RANGE函数创建分区表

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 个答案:

答案 0 :(得分: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()返回整数,但不一定是整数类型。这是文档:

  

对于精确值数值参数,返回值具有精确值   数字类型。对于字符串或浮点参数,返回值   有一个浮点类型。

当你分割两个整数时,你会产生一个浮点参数,这不适合分区。