Bad sql
SELECT T3.CONFLICT_ID,
?????? T3.LAST_UPD,
?????? T3.CREATED,
?????? T3.LAST_UPD_BY,
?????? T3.CREATED_BY,
?????? T3.MODIFICATION_NUM,
?????? T3.ROW_ID,
?????? T3.ATTR_04,
?????? T3.ATTR_03,
?????? T2.VAL,
?????? T3.ATTR_01,
?????? T3.ATTR_02,
?????? T1.NAME,
?????? T2.VAL1
? FROM user.S_ORG_EXT T1, user.CX_LOOKUP T2, user.CX_POS_LOG_INFOT3
?WHERE T3.ATTR_02 = T1.PAR_ROW_ID
?? AND T3.ATTR_01 = T2.NAME1
?? AND T2.TYPE = 'PROVIDER'
?? AND (T3.TYPE = 'INFO')
?? AND (T3.ATTR_04 = :1 AND T3.ATTR_02 = :2)
?
原因分析:对CX_POS_LOG_INFO表全表扫描,其实统计信息也不准确,表的大小应该500M左右了
?
?
--------------------------------------------
| Operation????????????????????? | PHV/Object Name???? |?Rows | Bytes|?? Cost |
--------------------------------------------
|SELECT STATEMENT??????????????? |----- 1762745057 ----|?????? |?????|?? 3655 |
|NESTED LOOPS??????????????????? |???????????????????? |???? 1 |???1K|?? 3655 |
| NESTED LOOPS?????????????????? |???????????????????? |???? 1 |?109 |????? 2 |
|? TABLE ACCESS BY INDEX ROWID?? |S_ORG_EXT??????????? |???? 1 |??25 |????? 1 |
|?? INDEX UNIQUE SCAN??????????? |S_ORG_EXT_U3???????? |????1 |????? |????? 2 |
|? TABLE ACCESS BY INDEX ROWID?? |CX_LOOKUP??????????? |???? 1 |??84 |????? 1 |
|?? INDEX RANGE SCAN???????????? |CX_LOOKUP_U1???????? |????1 |????? |????? 2 |
| TABLE ACCESS FULL????????????? |CX_POS_LOG_INFO????? |????1 |??? 1K|?? 3653 |
--------------------------------------------
Statistics
----------------------
????????? 1?recursive calls
????????? 0?db block gets
????? 71207?consistent gets
????? 71187?physical reads
????????? 0?redo size
?????? 1131?bytes sent via SQL*Net to client
??????? 460?bytes received via SQL*Net from client
????????? 1?SQL*Net roundtrips to/from client
????????? 0?sorts (memory)
????????? 0?sorts (disk)
????????? 0?rows processed
?
?
解决思路:
手工添加组合索引,使查询走组合索引,查询从65秒下降到1秒,逻辑读从71207(556M)下降到21
create indexSIEBEL.IDX_CX_POS_LOG_INFO_U1 on SIEBEL.CX_POS_LOG_INFO (ATTR_02, ATTR_04)
? tablespace SIEB_IDX
?
?
?
Execution Plan
----------------------
?? 0?????SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=1 Bytes=1278)
?? 1???0?? TABLE ACCESS (BY INDEX ROWID)OF 'CX_POS_LOG_INFO' (Cost=1 Card=1 Bytes=1169)
?? 2???1???? NESTED LOOPS (Cost=3 Card=1Bytes=1278)
?? 3???2?????? NESTED LOOPS (Cost=2Card=1 Bytes=109)
?? 4???3???????? TABLE ACCESS (BY INDEXROWID) OF 'S_ORG_EXT' (Cost=1? Card=1Bytes=25)
?? 5???4?????????? INDEX (UNIQUE SCAN) OF'S_ORG_EXT_U3' (UNIQUE) (Cost=2 Card=1)
?? 6???3???????? TABLE ACCESS (BY INDEXROWID) OF 'CX_LOOKUP' (Cost=1? Card=1Bytes=84)
?? 7???6?????????? INDEX (RANGE SCAN) OF'CX_LOOKUP_U1' (UNIQUE) (Cost=2 Card=1)
?? 8???2?????? INDEX (RANGE SCAN) OF'IDX_CX_POS_LOG_INFO_U1'? (NON-UNIQUE)(Cost=1 Card=93)
Statistics
----------------------
????????? 0?recursive calls
????????? 0?db block gets
???????? 18?consistent gets
????????? 0?physical reads
????????? 0?redo size
?????? 1448?bytes sent via SQL*Net to client
??????? 655?bytes received via SQL*Net from client
????????? 2?SQL*Net roundtrips to/from client
????????? 0?sorts (memory)
????????? 0?sorts (disk)
????????? 1?rows processed