2008.07.01 sql优化一例
上一篇 / 下一篇 2008-07-01 12:08:45 / 个人分类:pl/sql
昨天下午 客户报某个页面长期操作没完成
检查数据库日志 发现ora-01555错误 捕获的sql如下:
Select b.Id, b.credit_amountITPUB个人空间 w^J(w8rAML@{7I0r
From (Select * From tb_test_bonus Where role_bonus_id = 121) aITPUB个人空间9h8N.C%M/t3DL
Right Join (Select * From tb_test Where role_id = 6) b On a.client_id = b.Id
:pc[B#^.~0 Where a.Id Is Null
最先想到的是对表进行分析 因为这两个表在开始上生产时才分析过一次
现在数据量也有变化 用dbms_stat包分析后
SQL> set autot onITPUB个人空间amc
p}5CA1h~
SQL> Select b.Id, b.credit_amountITPUB个人空间
P)V4Z`-e b9N&m,t
2 From (Select * From tb_test_bonus Where role_bonus_id = 121) aITPUB个人空间ig"biOJ
3 Right Join (Select * From tb_test Where role_id = 6) b On a.client_id =ITPUB个人空间
V"j8Qb&Ub
b.IdITPUB个人空间9[)KwO.s
4 Where a.Id Is Null;
ID CREDIT_AMOUNT
/R&\.y a/icI\X0---------- -------------
`(?
_^/d9i7N|@m
M0 77349 0
ITPUB个人空间#J*?U)ow
Execution PlanITPUB个人空间3\U]iH(q({7SX
----------------------------------------------------------
Qs-W)RHO0 0 SELECT STATEMENT ptimizer=CHOOSE (Cost=186 Card=235 Bytes=8
j9H?Pmj aA0 460)
1 0 FILTER
X)\@!t9Ds%fY g0 2 1 NESTED LOOPS (OUTER)
5Q4^3p
c6lX:k0 3 2 TABLE ACCESS (BY INDEX ROWID) OF 'TB_test' (Cost=20ITPUB个人空间W;qAy`5Z
Card=207 Bytes=4554)
4 3 INDEX (RANGE SCAN) OF 'FKINDEX1_21' (NON-UNIQUE) (CoITPUB个人空间3h;RC\Q
st=1 Card=207)
5 2 TABLE ACCESS (BY INDEX ROWID) OF 'TB_test_BONUS' (CoITPUB个人空间`Iy^.Xs
st=186 Card=1 Bytes=14)
6 5 BITMAP CONVERSION (TO ROWIDS)
N8Q9W:I(y4|0 7 6 BITMAP ANDITPUB个人空间.G0[0lQ vf0{1S
8 7 BITMAP CONVERSION (FROM ROWIDS)
?&OS)q8o:Wy0 9 8 INDEX (RANGE SCAN) OF 'FKINDEX2_28' (NON-UNIQU
(w:`"}Js8d*OId/?"M6_0 E)
10 7 BITMAP CONVERSION (FROM ROWIDS)ITPUB个人空间qyn!wJx&x
11 10 INDEX (RANGE SCAN) OF 'FKINDEX1_23' (NON-UNIQU