2010-07-19 33 views
4

我有一個大(150米+行)的表,它被劃分成使用DATE分區鍵四分之三。甲骨文分區修剪與綁定變量

當我使用類似的查詢表...

SELECT * 
FROM LARGE_TABLE 
WHERE THE_PARTITION_DATE >= TO_DATE('1/1/2009', 'DD/MM/YYYY') 
AND THE_PARTITION_DATE < TO_DATE('1/4/2009', 'DD/MM/YYYY'); 

...分區修剪的正常工作......在optomiser能夠認識到,只需要看看一個分區(在這種情況是Q1 2009)。解釋計劃顯示「分區範圍單一」

但是,當我將此查詢移動到PL/SQL並將相同日期作爲變量傳遞時,計劃顯示爲「PARTITION RANGE(ITERATOR)」... optomiser是無法理解它只需要看單個部分(可能是因爲它在評估計劃時沒有實際值)。

我發現圓形迄今唯一的解決方法是代碼,包括在SQL字符串,這樣的分區修剪工作正確的日期的EXECUTE IMMEDIATE。

有沒有更好的方法?

回答

7

我不認爲你應該看到與綁定變量的實際性能差異 - 你應該看到「PARTITION RANGE ITERATOR PARTITION:KEY KEY ...」的執行計劃步驟,這意味着Oracle將確定啓動和停止分區在執行時間。

+0

所以它確實。沒有發現這一點。謝謝。 – cagcowboy 2010-07-19 20:18:13