database partitioning - MySQL Partition by Month not working -


i create table by

create table `part_tab` (   `id` int not null,   `use_time` datetime not null ) engine=innodb default charset=utf8  partition hash(month(use_time)) partitions 12; 

then use explain partions syntax, seems mysql didn't use partition, still scans whole table:

mysql> explain partitions select * part_tab use_time < '2013-02-01' \g *************************** 1. row ***************************            id: 1   select_type: simple         table: part_tab    partitions: p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11          type: possible_keys: null           key: null       key_len: null           ref: null          rows: 12         extra: using 1 row in set (0.00 sec) 

if change condition equal,the partition used:

 mysql> explain partitions select * part_tab use_time = '2013-02-01' \g  *************************** 1. row ***************************            id: 1   select_type: simple         table: part_tab    partitions: p2          type: possible_keys: null           key: null       key_len: null           ref: null          rows: 2         extra: using 1 row in set (0.00 sec) 

your query is:

select * part_tab use_time = '2013-02-01'; 

your partition statement is:

partition hash(month(use_time)) partitions 12; 

what trying called "partition pruning". according documentation,

pruning can applied tables partitioned on date or datetime column when partitioning expression uses year() or to_days() function. in addition, in mysql 5.7, pruning can applied such tables when partitioning expression uses to_seconds() function.

i don't believe there way partition pruning directly on month() instead of year(). can rewrite query as:

select * part_tab month(use_time) = 1; 

however, suspect range partitioning on date better solution.


Comments

Popular posts from this blog

javascript - RequestAnimationFrame not working when exiting fullscreen switching space on Safari -

Python ctypes access violation with const pointer arguments -