时间型分区字段不走分区的解决

表的字段date_id定义为Integer型,并且date_id为本表分区字段。现在有一个处理,需要取表中本月第一条到目前的累积数据。
老虎的sql如下:
select *
FROM PV_MART_A.FIN_MID_SERV_INC_DAILY A1
WHERE Date_Id <=CAST('20090818' AS INTEGER)-2
and substr(cast(date_id as VARCHAR(8)),1,6)=substr((cast((CAST(CAST('20090818' AS DATE FORMAT 'YYYYMMDD')-2 AS INTEGER)+19000000) as varchar(8))),1,6)
;
因为上述sql条件等号的左右都做了处理,毫无疑问她不会走分区。

[@more@]修改sql如下:
select *
FROM PV_MART_A.FIN_MID_SERV_INC_DAILY A1
WHERE Date_Id between (date - extract(day from date) + 1)/1+19000000 and CAST('20090818'AS INTEGER)-2
;
仍不走分区,但sql改成:
select *
FROM PV_MART_A.FIN_MID_SERV_INC_DAILY A1
WHERE Date_Id between 20090801 and 20090816;
可以走分区,请问有没有什么办法让其走分区?

经过多次实验,sql改成如下样子会走分区:
select *
FROM PV_MART_A.FIN_MID_SERV_INC_DAILY A1
WHERE Date_Id between cast(trim(substr('20090818',1,6))||'01' as integer) and CAST('20090818'AS INTEGER)-2
;

问题解决了,调优目的达到了,但是没有搞明白优化器为什么做这种选择。

闲了好好研究研究优化器的操作。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16723161/viewspace-1027097/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16723161/viewspace-1027097/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值