因為Database的版本由9i升級為11g,在測試的過程中發現某些報表在9i與11g顯示出來的排序不一樣。
但是報表使用的SQL及程式都是一樣的,在回報顧問之後,得知SQL中有使用distinct後,但是9i與11g在處理上有不一樣的地方。
而11g有一個參數optimizer_features_enable可以改為9i的處理方式,但是多少會影響效能,測試步驟如下:

11g預設的值
SQL> select name,value from v$parameter where name='optimizer_features_enable';

NAME VALUE
----------------------------------- --------------------
optimizer_features_enable 11.2.0.4


執行下列SQL後可以發現資料並未排序,執行計劃可以知道11g使用HASH (UNIQUE)
SQL> select distinct a from tmp_ddd where rownum alter system set optimizer_features_enable='9.2.0';

System altered.

查詢設定是否成功
SQL> select name,value from v$parameter where name='optimizer_features_enable';

NAME VALUE
----------------------------------- --------------------
optimizer_features_enable 9.2.0

再執行相同的SQL,可以發現資料已自動排序,執行計畫顯示為SORT (UNIQUE)
SQL> select distinct a from tmp_ddd where rownum


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 keven 的頭像
    keven

    平凡的幸福(備站)

    keven 發表在 痞客邦 留言(0) 人氣()