2011-11-24 24 views
1

我试图划分一个表,这是它的结构:Mysql的,不分区工作日期范围

CREATE TABLE IF NOT EXISTS `actions` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `uuid` varchar(36) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `username` varchar(16) COLLATE utf8_unicode_ci NOT NULL, 
    `event` varchar(16) COLLATE utf8_unicode_ci NOT NULL, 
    `obj_id` int(11) unsigned NOT NULL, 
    `inline` text COLLATE utf8_unicode_ci NOT NULL, 
    `meta` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`,`date`), 
    KEY `event` (`event`), 
    KEY `obj_id` (`obj_id`), 
    KEY `username` (`username`), 
    KEY `date` (`date`), 
    KEY `user_date` (`username`,`date`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
PARTITION BY RANGE (UNIX_TIMESTAMP(date)) 
(PARTITION actions_0 VALUES LESS THAN (1209592800) ENGINE = InnoDB, # 2008-05-01 
PARTITION actions_images_1 VALUES LESS THAN (1212271200) ENGINE = InnoDB, # 2008-06-01 
[...] 
PARTITION actions_67 VALUES LESS THAN (1388530800) ENGINE = InnoDB, 
PARTITION actions_68 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) 
现在

,这似乎是罚款时,我选择了一个特定的日期:

EXPLAIN PARTITIONS SELECT * FROM `actions` WHERE `date` = '2008-05-04 16:13:15' ; 

+----+-------------+----------------+------------------ 
| id | select_type | table   | partitions  
+----+-------------+----------------+------------------ 
| 1 | SIMPLE  | actions  | actions_1 

,但如果我这样做查询:

EXPLAIN PARTITIONS SELECT * FROM `actions` WHERE `date` > '2008-05-04 16:13:15' AND `date` < '2008-05-05 16:13:15'; 

Mysql的扫描所有actions_N表,我究竟做错了什么? 这是我第一次使用分区,但我遵循手册,我无法找到我错误的地方。

谢谢!

回答

0

采用聘请了多名日期或日期时间其他日期或时间类型的分区列不与RANGE柱子支撑。

DATE和DATETIME。作为分区列不支持使用与日期或时间相关的其他数据类型的列。