免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1442 | 回复: 6
打印 上一主题 下一主题

请教高手,望赐教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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

论坛徽章:
0
2 [报告]
发表于 2005-07-18 10:46 |只看该作者

请教高手,望赐教

试试不用hash join,去掉那个指示器

论坛徽章:
0
3 [报告]
发表于 2005-07-18 11:05 |只看该作者

请教高手,望赐教

不用hash是可以的,cost减少很多,但以前用过同样的写法,速度很快的。是否与数据库参数有关?

论坛徽章:
0
4 [报告]
发表于 2005-07-18 12:54 |只看该作者

请教高手,望赐教

两个表的记录数是多少?
要做update statistics。
试试在a.custno_i,b.custno_i建索引,试试二楼的说的方法。

论坛徽章:
0
5 [报告]
发表于 2005-07-19 09:43 |只看该作者

请教高手,望赐教

t_cif_info是1800万,t_acct_info是4000万,已经在custno_i上建了索引,b.acctorig_cr 和 b.acctstatus_cr也建了索引

论坛徽章:
0
6 [报告]
发表于 2005-07-19 20:37 |只看该作者

请教高手,望赐教

如过表数据经常更新的话要做update statistics

论坛徽章:
0
7 [报告]
发表于 2005-07-19 21:10 |只看该作者

请教高手,望赐教

数据库处理连接要么嵌套循环,要么使用hash,楼主指定使用hash。试试二楼说的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP