| 
                 分類:[データベース全般] 
 
 あるSQLがORACLE 11Gでは1分以内で終了していたのですが、
12Cで実行すると3分ほどかかるようになってしまいました。
色々と調べたのですが、原因がわからず
たまたまORDER BYを外して実行すると15秒程度で
完了しました。
問題は解決したのでよかったのですが、明確な
理由がわからずモヤモヤとしています。
11Gと12CではORDER BYの仕組みが異なるのでしょうか?
●環境
    OS:Windows 2008 Server
		CPU INTEL 2.2GH(2core)
		MEMORY 9GB
    ORACLE Ver:12.1.0.2.0
        SGA:4GB
●SQLの概要
SELECT 
    A.COLUMN1,
    A.COLUMN2,
    A.COLUMN3,
    A.COLUMN4,
    B.COLUMN1,
    B.COLUMN2,
    C.COLUMN1,
    D.COLUMN1,
    E.COLUMN1
FROM VIEW1  A,
TBL1 B,
(SELECT COLUMN1..... FROM TBL1 WHERE COLUMN4 = (SELECT COLUMN_A FROM INTBL1 WHERE INKEY= **1)) C,
(SELECT COLUMN1..... FROM TBL1 WHERE COLUMN4 = (SELECT COLUMN_A FROM INTBL1 WHERE INKEY= **2)) D,
(SELECT COLUMN1..... FROM TBL1 WHERE COLUMN4 = (SELECT COLUMN_A FROM INTBL1 WHERE INKEY= **3)) E
WHERE A.KEY1(+) = B.KEY1
AND   A.KEY1(+) = C.KEY1
AND   A.KEY1(+) = D.KEY1
AND   A.KEY1(+) = E.KEY1
AND   A.YMD >= '20180911'
ORDER  BY A.SORTCOLUMN1
●VIEW1の概要
    ・複数のテーブル(15テーブル)から必要な項目を抜き出して共通するキーで外部結合
    ・3000件程度
●その他テーブルの概要
    ・2000件程度
●確認したこと
	 
    ・ORDER BYがある時のコストは5254(データ量は1747898625)
    ・ORDER BYがある時の操作は
         SELECT STATEMENT 
            ┗MERGE JOIN OUTER
                ┗MERGE JOIN OUTER
                以下MERGE JOINが続く
    ・ORDER BYがない時のコストは5243(データ量は1758578250)
    ・ORDER BYがない時の操作は
          SELECT STATEMENT 	OPTIMIZER_MODE = ALL_ROWS
              ┗HASH JOIN RIGHT OUTER	
                 ┗INDEX FAST FULL SCAN	IDXMST999
                以下HASH JOINが続く
	・alter session set "_optimizer_undo_cost_change"='11.2.0.4'にてオプティマイザを11Gにしてみたが
      処理時間は変わらなかった。
  |