時間型分割槽欄位不走分割槽的解決

miguelmin發表於2009-09-18

表的欄位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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章