SYS_OP_C2C 導(dǎo)致的全表掃描(fts)/全索引掃描 參考原文: SYS_OP_C2C Causing Full Table/Index Scans (Doc ID 732666.1) 適用于: Oracle Database - Enterprise Edition - Version 10.1.0.2 to 12.1.0.1 [Release 10.1 to 12.1] Information in this docu
SYS_OP_C2C 導(dǎo)致的全表掃描(fts)/全索引掃描
參考原文:
SYS_OP_C2C Causing Full Table/Index Scans (Doc ID 732666.1)
適用于:
Oracle Database - Enterprise Edition - Version 10.1.0.2 to 12.1.0.1 [Release 10.1 to 12.1]
Information in this document applies to any platform.
This problem can occur on any platform.
癥狀:
1)正在執(zhí)行一個(gè)帶有綁定變量的查詢
2)綁定變量經(jīng)由application(.net, j2ee等)使用 "string" 類型的綁定變量來(lái)綁定。
3)該查詢錯(cuò)誤的執(zhí)行了全表掃描/索引掃描,而沒(méi)有使用索引唯一掃描或者索引范圍掃描
4)使用advanced 選項(xiàng)查看explain plan, sqltxlain or 10053 trace,你會(huì)注意到在"Predicate Information"部分 會(huì)顯示一個(gè) "filter(SYS_OP_C2C)".
e.g select * from table(dbms_xplan.display_cursor(&sql_id,null,'ADVANCED'));
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(SYS_OP_C2C("COL1")=:B1) <=== filter operation occurring
原因:
"string" 綁定變量 與 table 中的該 column 使用了不同的數(shù)據(jù)類型
這意味著 當(dāng)執(zhí)行這個(gè)查詢的時(shí)候,需要把數(shù)據(jù)進(jìn)行一個(gè)隱式類型轉(zhuǎn)換。 SYS_OP_C2C 是一個(gè)隱式函數(shù)(implicit function),該函數(shù)用于字段(列)在nchar和char之間轉(zhuǎn)換
解決方案:
1. 建立一個(gè)基于函數(shù)的索引。
e.g create index
或者:
2.讓綁定變量定義的數(shù)據(jù)類型與該列的數(shù)據(jù)類型一致。
A java example where this can occurs is when defaultNChar=TRUE. This will cause strings to bind as NVARCHAR2 causing the predicate that are subset datatypes to be converted to NVARCHAR2.
e.g. -Doracle.jdbc.defaultNChar=true
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com