我有一个统计表,包含帐号、业务数据以及日期字段,数据量会比较多,而且大多数查询条件是帐号以及时间段。
我建立两个测试表,一个分区,一个不分区。
分区函数用如下形式:PARTITION BY RANGE (datediff(settledate,'2008-05-31'))
(PARTITION p0806 VALUES LESS THAN (30) ENGINE = InnoDB,
 PARTITION p0807 VALUES LESS THAN (61) ENGINE = InnoDB,
 PARTITION p0808 VALUES LESS THAN (92) ENGINE = InnoDB,
 PARTITION p0809 VALUES LESS THAN (122) ENGINE = InnoDB,
 PARTITION p0810 VALUES LESS THAN (153) ENGINE = InnoDB,
 PARTITION p0811 VALUES LESS THAN (183) ENGINE = InnoDB,
 PARTITION p0812 VALUES LESS THAN (214) ENGINE = InnoDB,
 PARTITION p0901 VALUES LESS THAN (245) ENGINE = InnoDB,
 PARTITION p0902 VALUES LESS THAN (273) ENGINE = InnoDB,
 PARTITION p0903 VALUES LESS THAN (304) ENGINE = InnoDB,
 PARTITION p0904 VALUES LESS THAN (334) ENGINE = InnoDB,
 PARTITION p0905 VALUES LESS THAN (365) ENGINE = InnoDB,
 PARTITION p0906 VALUES LESS THAN (395) ENGINE = InnoDB,
 PARTITION p0907 VALUES LESS THAN (426) ENGINE = InnoDB,
 PARTITION p0908 VALUES LESS THAN (457) ENGINE = InnoDB,
 PARTITION p0909 VALUES LESS THAN (487) ENGINE = InnoDB,
 PARTITION p0910 VALUES LESS THAN (518) ENGINE = InnoDB,
 PARTITION p0911 VALUES LESS THAN (548) ENGINE = InnoDB,
 PARTITION p0 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)然后两个表里面都插入400多万的数据,进行测试的时候,性能基本没有什么差异啊。
是分区表的问题还是我没有选择好的分区函数的关系?

解决方案 »

  1.   

     InnoDB 本身就差别不大,换成myisam 试一下。另外你测试用的SQL语句是什么?
      

  2.   

    测试的sql语句就是select * from table where account='test' and settledate>='2009-10-01' and settledate<='2009-10-31';account是帐号,settledate是时间
      

  3.   

    对了,使用innodb引擎是因为事务的关系,可能会回滚。myisam应该不行吧
      

  4.   

    select * from table where account='test' and settledate>='2009-10-01' and settledate<='2009-10-31';你这样根本用不上分区公式! 你需要同样使用 (datediff(settledate,'2008-05-31')) >xxx
      

  5.   

    不会吧,难道分区公式用year(),在查询中就一定要使用year函数吗?
      

  6.   

    我再次测试用DATEDIFF(settledate,'2008-05-31')>310 AND DATEDIFF(settledate,'2008-05-31')<320做条件查询,还是一样的
      

  7.   

    不妨一试。
    year()的情况和你目前的不一样。
      

  8.   

    函数错了吧
    mysql优化器支持以下两种内置的日期函数进行分区:TO_DAYS() 
    YEAR()