MySQL社区

标题: 创建了个分区表,但是解释sql语句时还是扫描的所有行 [打印本页]

作者: habwn    时间: 2014-3-26 11: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吗?


作者: kider    时间: 2014-3-26 15:25
不怎么用分区,我们自己的测试,效果不怎么样,建个索引试试...
作者: nycle    时间: 2014-3-26 20:23
不知道楼主是哪个版本的?
我这边用5.5.35做了实际,是可以直接定位到p_20140325分区的。
另外,从5.5开始,可以不必再通过to_days来转换进行range分区,可以直接使用日期进行range分区了。
作者: habwn    时间: 2014-3-27 16:36
nycle 发表于 2014-3-26 20:23
不知道楼主是哪个版本的?
我这边用5.5.35做了实际,是可以直接定位到p_20140325分区的。
另外,从5.5开 ...

我用的5.1.46版本的,可能是版本太低了,多谢哟。





欢迎光临 MySQL社区 (http://www.mysqlpub.com/) Powered by Discuz! X3.2