Oracle 10g。用NLS_COMP修剪Oracle分區=語言
我們有一個由varchar2列分區的大表(如果它是由我決定的,它不會是這個列,但它是),每個分區都有一個值。防爆。 PARTITION「PARTION1」VALUE('C')。
我們也有NLS_COMP = LINGUISTIC。
分區修剪在指示該列中的值時不起作用。
SELECT * from table1 where column_partitioned_by = 'C'
這對所有分區進行全表掃描,而不僅僅是相關的分區。
根據文檔here,「NLS_COMP參數不影響分區表的比較行爲。」
如果我發出:
ALTER SESSION SET NLS_COMP = BINARY
然後:
SELECT * from table1 where column_partitioned_by = 'C'
它不正確修剪分區下來。 (我正在修剪/不修剪生成的計劃)
有什麼,缺少硬編碼分區名稱到from子句,這將在這裏工作?
此外,更改分區定義也是如此。我在我的團隊中屬於少數派,因爲他甚至認爲這是一個問題。在我到達那裏之前,先前的團隊決定通過在FROM子句中添加硬編碼分區名稱的字符串查找和替換來發送所有應用程序SQL查詢來「解決」此問題,並且有人手動更新存儲的特效中的分區名稱根據需要...但它有一天會突破,而且會突破。我試圖找到最少侵入性的方法,但恐怕可能沒有。
最好,這將是一個解決方案,只改變查詢本身而不是基礎數據庫結構。就像我說的,這種解決方案可能根本不存在......
我希望我能做任何事情,但看到我上面的編輯。我會在修改之前爲您提供技術上正確的投票和我的問題範圍。 – rfusca 2010-02-18 20:05:59