ITPub博客

首页 > 数据库 > 数据库开发技术 > 时间型分区字段不走分区的解决

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

原创 数据库开发技术 作者:miguelmin 时间:2009-09-18 10:44:58 0 删除 编辑

表的字段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博客 ” ,链接:https://blog.itpub.net/16723161/viewspace-1027097/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Teradata spool空间2
请登录后发表评论 登录
全部评论
  • 博文量
    138
  • 访问量
    1628718