为了测试分区表,我弄了4个(套)表,每个表都有readtime(datetime类型)和ID(自增长),以及其他字段:
1,日表,每天一张表,以ID为主键;
2,普通表,所有的数据放在一张表中,以readtime和ID为联合主键;
3,时间分区表,以readtime和ID为联合主键,以readtime为区字段,一天一个区。
3,整数分区表,添加了一个Date字段(int),以Date和ID为联合主键,以Date为区字段,一天一个区。Date字段的数值来自于readtime的日期值,如20110912。以下是测试数据平均值,单位为毫秒。每次测试的日期都不重复,保证不用缓存结果。
1,select count(*) 某一天的数据
日表         10295
时间分区表   3939
整数分区表   5380
普通表       41262,insert 1000条 到某一天中。readtime的日期固定,时间随机。
日表         348
时间分区表   31603
整数分区表   278
普通表       19236有两点不明白:
1,为啥日表的select count(*)会这么慢,是因为其他表都是固定表,有缓存么?
2,为啥时间分区表的insert效率会如此之低??!!比普通表还慢!

解决方案 »

  1.   

    這與類型佔用的大小有關Datetime--儲存為兩個 4 位元組的整數。
      

  2.   

    1,为啥日表的select count(*)会这么慢,是因为其他表都是固定表,有缓存么?這會選擇表里最小的索引掃描2,为啥时间分区表的insert效率会如此之低??!!比普通表还慢!看是與什麼做比較
      

  3.   

    1,为啥日表的select count(*)会这么慢,是因为其他表都是固定表,有缓存么?
    这可能是缓存原因,楼主应该每个测试语句连续运行三次,取2、3次的平均,一定程度消除缓存影响。2,为啥时间分区表的insert效率会如此之低??!!比普通表还慢!
    分区引起插入慢是已知的,关键是DATETIME用于分区并不合适,改为INT或者DATE(2008才有,楼主未测试,有机会最好测试下)才比较合适。