本帖最后由 gxk9933 于 2013-02-18 15:45:31 编辑

解决方案 »

  1.   

    1 你这时间to_day以后hash  相当于表存储是按照日期随机放的   访问的时候当然要访问所有分区
      

  2.   

    不好意思,应该是我描述有误,第二步不进行时间过滤条件查询,使用hash分区也会查询20多秒,而range分区还是不到1秒就查出来数据了。这个我很不解
      

  3.   


    hash是访问所有分区,如果是并发访问,那么跟访问一个分区的时间应该不会相差那么大,前者20s,后者是0.1秒,这个比较难理解
      

  4.   

    问题:为什么hash分区的查询速度会慢于range分区,我在网上查了一些资料,hash分区也是根据取模将数据放入不同分区中,为什么我根据分区字段去查询,也会扫描所有分区。还有一种说法据说对分区的查询时并发的,是这样的吗?你的数据是存放在所有分区中的,所有自然会搜索所有分区,这是由HASH算法而决定的。比如假设一种HASH算法是4个分区取余,则 1,5,9在一分区,2,6,10在第二分区,。。
    当你搜索 where x <3 ,显然你必须到多个分区中去查询。
      

  5.   

    很抱歉打扰大家了,我的问题应该是出在字段的选择上,而不是分区上,我使用datetime的速度会远远慢于使用int的速度,datetime的长度是8个字节,而int是4个,我想大概是因为这个原因,之前的问题描述上也有问题,麻烦大家了,非常感谢
      

  6.   

    问题在于你写的是> 某个时间段 ,而且有排序,hash结构是无序的,需重新排序
    你如果把sql改成 SELECT * FROM `stream` where `datetime` = '2013-02-17',估计hash表分区的会更快