create table if not exists tb_data(
data_dt datetime,
dev_sn varchar(16),
fV1 float(10,2),
fV2 float(10,2),
PRIMARY KEY (data_dt,dev_sn)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 PARTITION BY RANGE (COUNT(*))(
PARTITION p0 VALUES LESS THAN (1000000),
PARTITION p1 VALUES LESS THAN (2000000));请问这样子为什么不行!提示[Err] 1564 - This partition function is not allowed
我就是想用行数来分区,小于100万行做为第一个分区,100万到200万作为第二个分区......
请各位大侠出招,谢谢!

解决方案 »

  1.   

     一个变通的办法,加一个自增ID,按自增id来标记行号做RANGE分区
      

  2.   

    加入自增字段ID
    CREATE TABLE IF NOT EXISTS tb_data(
    id INT AUTO_INCREMENT,
    data_dt DATETIME,
    dev_sn VARCHAR(16),
    fV1 FLOAT(10,2),
    fV2 FLOAT(10,2),
    PRIMARY KEY (id)
    )ENGINE=INNODB DEFAULT CHARSET=utf8 PARTITION BY RANGE (id)(
    PARTITION p0 VALUES LESS THAN (1000000),
    PARTITION p1 VALUES LESS THAN (2000000));orCREATE TABLE IF NOT EXISTS tb_data(
    id INT NOT NULL,
    data_dt DATETIME,
    dev_sn VARCHAR(16),
    fV1 FLOAT(10,2),
    fV2 FLOAT(10,2)
    )ENGINE=INNODB DEFAULT CHARSET=utf8 PARTITION BY RANGE (id)(
    PARTITION p0 VALUES LESS THAN (1000000),
    PARTITION p1 VALUES LESS THAN (2000000));
      

  3.   

    还有个问题,如果按自增ID分区后,我查询条件为一段时间内的即data_dt,当时间段跨越几个分区时,查询速度是不是很慢,以ID分区, 系统不知道哪个时间段在哪个分区,所以查询速度应该很慢。
      

  4.   

    如果 你要查询data_dt,建议你还是按data_dt来分区吧
      

  5.   

    1 先确定是否一定需要分区
    2 分区的依据,id,时间(年/年月...),区域(城市/部门..)
    3 count(*)当然不可能用来做依据,依据只能是当前行直接相关的字段