相同的SQL 在正式和测试环境中执行计划的不同

[复制链接]
查看11 | 回复6 | 2009-6-5 10:02:28 | 显示全部楼层 |阅读模式
相同的SQL 在两个环境里面执行计划不同 ,由于 测试环境 数据行数比较小 ,执行很快,而正式环境 数据量大 得执行6个多小时 ,大家帮忙看看差别在哪 ? 多谢
语句大概是这样的 select tab1.*from(a ,b) tab1 ,tab2 where tab1 tab2
select tab1.cardno cardno,tab1.totalamt totalamt,tab2.amt cardamt
from (
select /*count(*)*/a.cardno cardno,a.curamt+nvl(b.tranamt,0) totalamt
from (
select /*count(*)*/ t1.cardno cardno,sum(nvl(t1.curamt,0)) curamt
from cardacct t1
where t1.cardstat = '00' and t1.openflag = '1'
/*and t1.carddate >= '20110101' and t1.carddate = '20110101' and to_char(a.sellcarddate,'yyyymmdd') = '9000100188803462573'*/
) tab2
where tab1.cardno >= tab2.startno and tab1.cardnotab2.amt or tab1.totalamttab2.amt);
[ 本帖最后由 lgyy 于 2011-9-9 16:04 编辑 ]
回复

使用道具 举报

千问 | 2009-6-5 10:02:28 | 显示全部楼层
数据库版本,参数文件设置、表的统计信息、数据量大小这些都影响执行计划和执行时间。
回复

使用道具 举报

千问 | 2009-6-5 10:02:28 | 显示全部楼层
说的在理 慢慢搞
回复

使用道具 举报

千问 | 2009-6-5 10:02:28 | 显示全部楼层
两个服务器的配置已经性能不一样,而且并发压力也不同,网络情况也不一样,执行计划不一样,也是合情合理的,需要自己慢慢调整的吧。
回复

使用道具 举报

千问 | 2009-6-5 10:02:28 | 显示全部楼层
楼上的说的有了不同环境 确实有点慢慢来
回复

使用道具 举报

千问 | 2009-6-5 10:02:28 | 显示全部楼层
取了一部分代码 ;
select /*count(*)*/ t1.cardno cardno,sum(nvl(t1.curamt,0)) curamt

from cardacct t1

where t1.cardstat = '00' and t1.openflag = '1'
group by t1.cardno

------------------------ 10.2.0.1
openflag 列只有 '0'或'1'两个值 。
cardstat 列的值 是 '00'或 '01' 或'02' 或 '03'
cardacct300万 数据,怎么建索引优化?
1. normal 索引 (cardno,curamt , cardstat ,openflag )
2. normal 索引 (cardstat, openflag)
3,位图索引 (openflag)
选哪个 ???
回复

使用道具 举报

千问 | 2009-6-5 10:02:28 | 显示全部楼层
搞了物化视图
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行