habwn 发表于 2014-3-26 11:22:22

创建了个分区表,但是解释sql语句时还是扫描的所有行

-- 创建分区表的sql
CREATE TABLE netflow_report(
netflow bigint,
stat_time datetime,
domain VARCHAR(100),
filename VARCHAR(255),
source VARCHAR(20))
PARTITION BY RANGE(TO_DAYS(stat_time))
   (
         PARTITION p_20140323 VALUES LESS THAN (TO_DAYS('2014-03-24')),
         PARTITION p_20140324 VALUES LESS THAN (TO_DAYS('2014-03-25')),
         PARTITION p_20140325 VALUES LESS THAN (TO_DAYS('2014-03-26')),
         PARTITION p_20140326 VALUES LESS THAN (TO_DAYS('2014-03-27')),
       PARTITION p_20140327 VALUES LESS THAN (TO_DAYS('2014-03-28')),
         PARTITION p_20140328 VALUES LESS THAN (TO_DAYS('2014-03-29')),
         PARTITION p_20140329 VALUES LESS THAN (TO_DAYS('2014-03-30')),
         PARTITION p_20140330 VALUES LESS THAN (TO_DAYS('2014-03-31')),
         PARTITION p_20140331 VALUES LESS THAN (TO_DAYS('2014-04-01'))
    );

--在客户端解释的sql
select cast(substr(stat_time,1,16) as CHAR)stat_time,domain,
sum(FLOOR(netflow/(10*60))) as netflow
from netflow where stat_time between '2014-03-25 00:00:00'
and '2014-03-25 23:59:59'
group by substr(stat_time,1,16),domain
order by stat_time desc

-- 解释结果



problem: rows还是所有的行数,这是为什么呢?partitions处为什么会显示两个呢?不应该只有个p_20140325吗?

nycle 发表于 2014-3-26 20:23:45

不知道楼主是哪个版本的?
我这边用5.5.35做了实际,是可以直接定位到p_20140325分区的。
另外,从5.5开始,可以不必再通过to_days来转换进行range分区,可以直接使用日期进行range分区了。

kider 发表于 2014-3-26 15:25:45

不怎么用分区,我们自己的测试,效果不怎么样,建个索引试试...

habwn 发表于 2014-3-27 16:36:34

nycle 发表于 2014-3-26 20:23
不知道楼主是哪个版本的?
我这边用5.5.35做了实际,是可以直接定位到p_20140325分区的。
另外,从5.5开 ...

我用的5.1.46版本的,可能是版本太低了,多谢哟。
页: [1]
查看完整版本: 创建了个分区表,但是解释sql语句时还是扫描的所有行