有关MySQL分区表的2个问题

RogerZhu 发布于 2012/07/04 16:04
阅读 1K+
收藏 0

最近在学习MySQL的分区表,遇到了2个问题向大家请教一下。

1.建立一个测试表,有id,content和date3个字段,id为主键,按时间分区会报错

create table test(
id int not null auto_increment,
content varchar(50) default NULL,
date datetime,
primary key(id)) ENGINE=InnoDB default charset=utf8
partition by range(to_days(date))(
partition p1 values less than (to_days('2012-02-01')),
partition p2 values less than (to_days('2012-03-01')),
partition p3 values less than (to_days('2012-04-01')),
partition p4 values less than (to_days('2012-05-01')),
partition p_other values less than maxvalue
);

1503 - A PRIMARY KEY must include all columns in the table's partitioning function

提示要把所有的分区字段设为主键,所以把date也设为主键

primary key(id,date)

这样可以建表,但是这样就使用了复合主键,感觉不太好,而且用日期作主键也不太常见。

对数据库设计不太懂,不知道有没有办法可以只使用一个主键建立分区呢?

 

2.在执行查询操作的时候,MySQL优化器应该是按分区去查询数据(网上资料上找到的,不知道是不是这样。。),但是我在查询p3分区的数据却发现还查询了p1分区的数据

mysql> explain partitions
    -> select count(*) from test where date > date('2012-03-01') and date < date('2012-04-01');

+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+--------------------------+
| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref  | rows | Extra                    |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+--------------------------+
|  1 | SIMPLE      | test  | p1,p3      | index | NULL          | PRIMARY | 12      | NULL | 3003 | Using where; Using index |
+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+--------------------------+

不知道为什么会出现这种情况,是本来就是这样执行,还是操作错误呢?求高人解答,thanks!

加载中
0
mark35
mark35
mysql分区表不要用于生产环境
做个坏人
做个坏人
纸上谈兵的,你是不没做过?
0
红宝石
红宝石

引用来自“mark35”的答案

mysql分区表不要用于生产环境
为何?
mark35
mark35
MySQL的帮助文档自己也说l分区表不成熟完善,再说mysql本身低能
返回顶部
顶部