|
分類:[データベース全般]
ある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にしてみたが
処理時間は変わらなかった。
|