|
环境:AIX 9.7.7, db2 9.7
在跑批量的时候临时表空间撑爆了,sql语句为select * from table a,table b WHERE A.KEY_1 BETWEEN 'XXX' AND 'XXX' AND A.KEY_1=B.KEY_1 ORDER BY A.KEY_1:,临时解决:runstats, bind--其中bind使用reopt once方式,这个解决方案不靠谱,过几天又会碰到临时表空间撑爆
我查看了下db2expln 执行计划,发现runstats前会走NLJOIN,并且先sort,再fetch
Rows
Operator
(ID)
Cost
2.5195e+06
n/a
RETURN
( 1)
1.25652e+06
|
2.5195e+06
n/a
NLJOIN
( 2)
1.25652e+06
/ \----\
2.5195e+06 *
n/a /--/ \
TBSCAN 1 2.38815e+07
( 3) n/a n/a
533470 IXSCAN Table:
| (10) B
2.5195e+06 22.7051
n/a |
SORT 2.38815e+07
( 4) Index:
533292 BPK
|
2.5195e+06
n/a
FETCH
(--)
472945
/ \
2.5195e+06 2.38815e+07
n/a n/a
RIDSCN Table:
( 6) A
16098.3
|
2.5195e+06
n/a
SORT
( 7)
16098.3
|
2.5195e+06
n/a
IXSCAN
( 8)
12830.8
|
2.38815e+07
Index:
APK
家住海淀 发表于 2013-6-27 16:19
跑批的sql中为啥加入order by这种严重影响性能的子句啊
保证断点续作 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|