點擊上方“IT那活兒”公眾號,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!!!
SELECT *
FROM (SELECT A.*,
ROW_NUMBER() OVER(PARTITION BY POLICYNO, CLASSCODE ORDER BY STOPDATE DESC) NN
FROM TESTID_RISKCON A
WHERE (POLICYNO = :B1 OR GPOLICYNO = :B1)
AND POLIST NOT IN (1)) T1
WHERE T1.NN = 1
Plan hash value: 1623810908
------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time | Pstart| Pstop | A-Rows | A-Time | Buffers |
------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 3672K(100)| | | | 0 |00:00:00.01 | 0 |
|* 1 | VIEW | | 1 | 256 | 99840 | 3672K (1)| 00:02:24 | | | 0 |00:00:00.01 | 0 |
|* 2 | WINDOW SORT PUSHED RANK| | 1 | 256 | 49664 | 3672K (1)| 00:02:24 | | | 0 |00:00:00.01 | 0 |
| 3 | PARTITION RANGE ALL | | 1 | 256 | 49664 | 3672K (1)| 00:02:24 | 1 | 43 | 0 |00:00:00.01 | 0 |
|* 4 | TABLE ACCESS FULL | TESTID_RISKCON | 2 | 256 | 49664 | 3672K (1)| 00:02:24 | 1 | 43 | 0 |00:00:00.01 | 1 |
------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("T1"."NN"=1)
2 - filter(ROW_NUMBER() OVER ( PARTITION BY "POLICYNO","CLASSCODE" ORDER BY INTERNAL_FUNCTION("STOPDATE") DESC )<=1)
4 - filter((("GPOLICYNO"=:B1 OR "POLICYNO"=:B1) AND "POLIST"<>1))
TESTID_RISKCON表的列GPOLICYNO和PLICYNO都有索引,在12.2里走全表掃描,在11g里,對于這個OR條件,是可以走索引聯(lián)合查詢的,如下所示:
--------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)|
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 12 (100)|
|* 1 | VIEW | | 1 | 52 | 20280 | 12 (9)|
|* 2 | WINDOW SORT PUSHED RANK | | 1 | 52 | 9828 | 12 (9)|
| 3 | CONCATENATION | | 1 | | | |
|* 4 | TABLE ACCESS BY GLOBAL INDEX ROWID| TESTID_RISKCON | 1 | 2 | 378 | 3 (0)||* 5 | INDEX RANGE SCAN | IDX_TESTID_RISKCON_01 | 1 | 2 | | 2 (0)||* 6 | TABLE ACCESS BY GLOBAL INDEX ROWID| TESTID_RISKCON | 1 | 50 | 9450 | 8 (0)||* 7 | INDEX RANGE SCAN | IDX_TESTID_RISKCON_02 | 1 | 50 | | 2 (0)|
--------------------------------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
1 - SEL$2 / T1@SEL$1
2 - SEL$2
4 - SEL$2_1 / A@SEL$2
5 - SEL$2_1 / A@SEL$2
6 - SEL$2_2 / A@SEL$2_2
7 - SEL$2_2 / A@SEL$2_2
BadExecution Plan With OR Query After Update To 12.2.0.1 (Doc ID2536570.1)
Apply Patch 29450812 if available for your version
OR
Workarounds:
Set _optimizer_cbqt_or_expansion=false
Or
Use USE_CONCAT hint in query
Or
Set optimizer_features_enable=12.1.0.2
主要原因是12.2開始對or擴展使用COSTBASEDTRANSFORMATION,導(dǎo)致BUG,最終通過在語句級關(guān)閉_optimizer_cbqt_or_expansion參數(shù)搞定。
CBQT ORE DOES NOT APPLY TO CORRELATED SCALAR SUBQUERY WITH OE
select value,sql_feature,description,optimizer_feature_enable from V$SYSTEM_FIX_CONTROL where BUGNO=26019148;
VALUE SQL_FEATURE DESCRIPTION OPTIMIZER_FEATURE_ENABLE
---------- ------------------------------ ------------------------------ -------------------------
1 QKSFM_OR_EXPAND_26019148 Allow ORE in select list subq 18.1.0
drop table t1;
drop table t2;
create table t1 (id number, name varchar2(4000)) ;
create table t2 (id number, name varchar2(4000), ext varchar2(100)) ;
create index t2_idx1 on t2(id);
create index t2_idx2 on t2(name);
begin
dbms_stats.gather_table_stats(ownname => user,tabname => t1,no_invalidate => false);
dbms_stats.gather_table_stats(ownname => user,tabname => t2,no_invalidate => false);
end;
/
--MERGE語句如下
MERGE INTO t2 USING (
SELECT id,name FROM t1
) x ON (
x.id = t2.id or x.name = t2.name
)
WHEN MATCHED THEN UPDATE SET ext = xxx
WHEN NOT MATCHED THEN INSERT (id) VALUES (1) ;
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------------------
Plan hash value: 4096058702
------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------
| 0 | MERGE STATEMENT | | 1 | 2067 | 4 (0)| 00:00:01 |
| 1 | MERGE | T2 | | | | |
| 2 | VIEW | | | | | |
| 3 | MERGE JOIN OUTER | | 1 | 4094 | 4 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL | T1 | 1 | 2015 | 2 (0)| 00:00:01 |
| 5 | BUFFER SORT | | 1 | 2079 | 2 (0)| 00:00:01 |
| 6 | VIEW | VW_LAT_8626BD41 | 1 | 2079 | 2 (0)| 00:00:01 |
|* 7 | TABLE ACCESS FULL| T2 | 1 | 2079 | 2 (0)| 00:00:01 |
------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
7 - filter("ID"="T2"."ID" OR "NAME"="T2"."NAME")
ORE: Checking validity of OR Expansion for query block SEL$2 (#0)
ORE: Predicate chain before QB validity check - SEL$2
"X"."ID"="T2"."ID" OR "X"."NAME"="T2"."NAME"
ORE: Predicate chain after QB validity check - SEL$2
"X"."ID"="T2"."ID" OR "X"."NAME"="T2"."NAME"
ORE: bypassed - Merge view query block.
DECLARE
l VARCHAR2(32767);
BEGIN
l := SYS.DBMS_SQLDIAG.create_sql_patch(
sql_id => 67ujj1cy9c81f,
hint_text => q[opt_param(_optimizer_cbqt_or_expansion,off)],
name => cbqt_ore_off);
END;
/
PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------
Plan hash value: 2960188956
---------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------
| 0 | MERGE STATEMENT | | 1 | 2067 | 2 (0)| 00:00:01 |
| 1 | MERGE | T2 | | | | |
| 2 | VIEW | | | | | |
| 3 | MERGE JOIN OUTER | | 1 | 4094 | 2 (0)| 00:00:01 |
| 4 | TABLE ACCESS FULL | T1 | 1 | 2015 | 2 (0)| 00:00:01 |
| 5 | BUFFER SORT | | 2 | 4158 | 0 (0)| 00:00:01 |
| 6 | VIEW | VW_LAT_8626BD41 | 2 | 4158 | 0 (0)| 00:00:01 |
| 7 | CONCATENATION | | | | | |
| 8 | TABLE ACCESS BY INDEX ROWID BATCHED| T2 | 1 | 2079 | 0 (0)| 00:00:01 |
|* 9 | INDEX RANGE SCAN | T2_IDX2 | 1 | | 0 (0)| 00:00:01 |
|* 10 | TABLE ACCESS BY INDEX ROWID BATCHED| T2 | 1 | 2079 | 0 (0)| 00:00:01 |
|* 11 | INDEX RANGE SCAN | T2_IDX1 | 1 | | 0 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
9 - access("NAME"="T2"."NAME")
10 - filter(LNNVL("NAME"="T2"."NAME"))
11 - access("ID"="T2"."ID")
Note
-----
- SQL patch "cbqt_ore_off" used for this statement
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129276.html
集成安裝之Oracle12C補丁升級數(shù)據(jù)字典更新報錯處理 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; ...
摘要:問題九庫控制文件擴展報錯庫的擴展報錯,用的是裸設(shè)備,和還是原來大小,主庫的沒有報錯,并且大小沒有變,求解釋。專家解答從報錯可以看出,控制文件從個塊擴展到個塊時報錯,而裸設(shè)備最大只支持個塊,無法擴展,可以嘗試將參數(shù)改小,避免控制文件報錯。 鏈接描述引言 近期我們在DBASK小程序新關(guān)聯(lián)了運維之美、高端存儲知識、一森咖記、運維咖啡吧等數(shù)據(jù)領(lǐng)域的公眾號,歡迎大家閱讀分享。 問答集萃 接下來,...
OGG Integrated Native DDL簡單測試 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%;...
閱讀 1353·2023-01-11 13:20
閱讀 1699·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1902·2023-01-11 13:20
閱讀 4161·2023-01-11 13:20
閱讀 2751·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20