访问远程数据库的某数据量很大的表的效率问题..

jingxijun 2010-10-19 02:19:54
select a.*,0.0 sdsyz,' ' bz into xsgwtk
from dlcg.run.dbo.orderrec a
where a.opertime>@wtsj and a.clearamt<>0 and a.bsflag='0S' and a.secuid+a.stkcode in (select fwgddm+fwzqdm from xsgdzjk)
group by a.orgid,a.custid,a.secuid,a.stkcode,a.bsflag,a.custname
order by a.custid


dlcg.run.dbo.orderrec这是远程服务器的1个表,几十万行甚至上百万行数据吧,其数据量大约几百兆
xsgdzjk是本地服务器的1个表,较小,万行以内
带宽是有限的

有无优化的余地?速度既要快又要占用广域网带宽小

select a.*,b.zjye from xsgdzjk a left join dlcg.run.dbo.orderrec b on a.secuid=b.secuid
这是左链接的方式,表的大小同上,它是什么数据顺序?即是把表xsgdzjk 传递到远程dlcg.run.dbo.orderrec 上呢?
还是把dlcg.run.dbo.orderrec 的数据传到本地? (几百兆啊)
或者其他方法?
(当然前2种方法肯定不是最优方法。假设是SQL2000企业版)
...全文
164 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jingxijun 2010-10-28
  • 打赏
  • 举报
回复
大家还有什么高见。
准备这几天就结贴
jingxijun 2010-10-22
  • 打赏
  • 举报
回复
远程的服务器没权利升级,其负荷较大,不过配置高多了
jingxijun 2010-10-22
  • 打赏
  • 举报
回复

带宽是百兆的哩。当然SQL是非得把远程表的所有数据都先传过来再比较的话,也紧张。(不过带宽可不能升到千兆)

本地机器的配置还是不错的,4核2.8G,8G内存,本身压力不大
fengyun142415 2010-10-22
  • 打赏
  • 举报
回复
升级一下硬件和宽带
jingxijun 2010-10-22
  • 打赏
  • 举报
回复
SQL77大侠等还有啥好建议呢?
jingxijun 2010-10-19
  • 打赏
  • 举报
回复
刚才测了下,先用临时表后GROUP的方法反而慢2秒
jingxijun 2010-10-19
  • 打赏
  • 举报
回复
是否可以先根据条件把记录保存到临时表中,然后再用临时表分组生成本地目标表
这样的效率不知能提供多少
jingxijun 2010-10-19
  • 打赏
  • 举报
回复
SORRY,怕代码太长,给删除了,有SUM的
SQL77 2010-10-19
  • 打赏
  • 举报
回复
select a.*,0.0 sdsyz,' ' bz into xsgwtk
from dlcg.run.dbo.orderrec a
where a.opertime>@wtsj and a.clearamt<>0 and a.bsflag='0S'
and exists(select 1 from xsgdzjk where a.secuid=fwgddm and a.stkcode=fwzqdm)
group by a.orgid,a.custid,a.secuid,a.stkcode,a.bsflag,a.custname
--order by a.custid

没统计加什么分组???
obuntu 2010-10-19
  • 打赏
  • 举报
回复
建好索引
筛选好数据。。
jingxijun 2010-10-19
  • 打赏
  • 举报
回复
先谢谢楼上。不用IN试试
本地的小表 xsgwtk可以随便添加索引,异地的大表orderrec是只读权限,现在上面有secuid 和 stkcode 2个索引的。
SQL77 2010-10-19
  • 打赏
  • 举报
回复
select a.*,0.0 sdsyz,' ' bz into xsgwtk
from dlcg.run.dbo.orderrec a
where a.opertime>@wtsj and a.clearamt<>0 and a.bsflag='0S'
and exists(select 1 from xsgdzjk where a.secuid=fwgddm and a.stkcode=fwzqdm)
group by a.orgid,a.custid,a.secuid,a.stkcode,a.bsflag,a.custname
--order by a.custid
最后一句看需要,最好按你的聚集索引顺序排好,在连接条件上要加上索引,如果你查询的数据量比xsgwtk这个表的数据量大很多,直接把xsgwtk这个表的非聚集索引禁用掉,最后再起用
--小F-- 2010-10-19
  • 打赏
  • 举报
回复
尽量不要用in

其实没什么 可以优化的

需要在硬件上下工夫

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧