Chinaunix

标题: 请教高手,望赐教 [打印本页]

作者: 大约在冬季    时间: 2005-07-18 10:03
标题: 请教高手,望赐教
我写这样一个sql:
echo "BEGIN : `date +%H:%M:%S`"
dbaccess cisdb <<EOF
SET EXPLAIN ON;
SET EXPLAIN ON AVOID_EXECUTE;
SET ISOLATION DIRTY READ;
SET PDQPRIORITY HIGH;
insert into tmp_all_savestat select --+ use_hash(a,b)
a.branchno_cr,'99',sum(nvl(b.balance_dc,0))
from t_cif_info a,t_acct_info b
where
a.custno_i=b.custno_i
and b.acctorig_cr !='4' and b.acctstatus_cr !='2'
group by a.branchno_cr;
SET EXPLAIN OFF;
EOF
echo "END : `date +%H:%M:%S`"
执行结果非常慢,跟踪显示两个表都是顺序扫描,根本没用到索引,请问问题出在哪里?
附跟踪结果:
Estimated Cost: 2147483647
Estimated # of Rows Returned: 12
Maximum Threads: 13


DIRECTIVES FOLLOWED:
USE_HASH ( a b )
DIRECTIVES NOT FOLLOWED:

Temporary Files Required For: Group By

  1) ccbcis.b: SEQUENTIAL SCAN

        Filters: (ccbcis.b.acctorig_cr != '4' AND ccbcis.b.acctstatus_cr != '2'
)

  2) ccbcis.a: SEQUENTIAL SCAN


DYNAMIC HASH JOIN
    Dynamic Hash Filters: ccbcis.a.custno_i = ccbcis.b.custno_i
作者: lmtok    时间: 2005-07-18 10:46
标题: 请教高手,望赐教
试试不用hash join,去掉那个指示器
作者: 大约在冬季    时间: 2005-07-18 11:05
标题: 请教高手,望赐教
不用hash是可以的,cost减少很多,但以前用过同样的写法,速度很快的。是否与数据库参数有关?
作者: zzjijun    时间: 2005-07-18 12:54
标题: 请教高手,望赐教
两个表的记录数是多少?
要做update statistics。
试试在a.custno_i,b.custno_i建索引,试试二楼的说的方法。
作者: 大约在冬季    时间: 2005-07-19 09:43
标题: 请教高手,望赐教
t_cif_info是1800万,t_acct_info是4000万,已经在custno_i上建了索引,b.acctorig_cr 和 b.acctstatus_cr也建了索引
作者: yyiiasc    时间: 2005-07-19 20:37
标题: 请教高手,望赐教
如过表数据经常更新的话要做update statistics
作者: zzjijun    时间: 2005-07-19 21:10
标题: 请教高手,望赐教
数据库处理连接要么嵌套循环,要么使用hash,楼主指定使用hash。试试二楼说的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2