关于一个远程链接查询的问题

习惯性蹭分 2013-10-18 08:52:52
现在有一个需求是几个地区数据库数据同步的。现在是做成JOB定时抛转。各个地区的表的数据也是
通过存储过程实时查询数据插入到一张表中,然后中央服务器分别取这个表的数据。现在我想问的是能不能直接在中央服务器通过查询语句查询各地区的数据,这个查询关联了几个表,在本地执行要几秒钟。
问题.这种查询会不会效率低,因为我的理解是要把所有表的数据读过来之后再关联查询什么的。
但是我做了一个实验,时间差不多。哪位能不能讲讲远程查询的执行过程?
...全文
165 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2013-10-21
  • 打赏
  • 举报
回复
引用 7 楼 tangguangqiang 的回复:
[quote=引用 2 楼 DBA_Huangzj 的回复:] 合并复制,把多个地区合并到中央服务器,借助sqlserver自身的技术,能够减少很多开销
没有用复制,要求实时性也不高。现在主要问题是。远程查询的时候对多个表进行查询的批处理是在远程端运行之后返回结果还是先把表加载过来再进行JOIn之类的操作?[/quote]加载后再join,直接join会使得统计信息不准确
LongRui888 2013-10-21
  • 打赏
  • 举报
回复
引用 7 楼 tangguangqiang 的回复:
[quote=引用 2 楼 DBA_Huangzj 的回复:] 合并复制,把多个地区合并到中央服务器,借助sqlserver自身的技术,能够减少很多开销
没有用复制,要求实时性也不高。现在主要问题是。远程查询的时候对多个表进行查询的批处理是在远程端运行之后返回结果还是先把表加载过来再进行JOIn之类的操作?[/quote] 一般,如果数据是在两个不同的服务器上,那么会先加载,然后再关联的,关键就是加载到2个服务器中的哪个。
习惯性蹭分 2013-10-21
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
合并复制,把多个地区合并到中央服务器,借助sqlserver自身的技术,能够减少很多开销
没有用复制,要求实时性也不高。现在主要问题是。远程查询的时候对多个表进行查询的批处理是在远程端运行之后返回结果还是先把表加载过来再进行JOIn之类的操作?
LongRui888 2013-10-21
  • 打赏
  • 举报
回复
引用 5 楼 tangguangqiang 的回复:
[quote=引用 1 楼 yupeigu 的回复:] 远程查询时,看你在那台服务器上执行。 比如,如果你在中央服务器上运行查询,而这个查询需要用到多个地区数据库上的数据,那么一般会把各个地区上需要的数据,加载到中央服务器上,进行表关联,得出结果。 所以,如果数据量比较大,那么大部分时间可能都花在了网络传输上了。
感谢小当家的回答,现在在中央服务器运行的查询只涉及到单个地区服务器的数据。所以这个过程应该不会把原表的数据加载过来。只会传输查询后的结果集。对吗?[/quote] 也就是说,查询中的所有的表,只会涉及到某一个地区的服务器是吧,那样确实是只会把结果集传回来。 如果,涉及到中央服务器的表,又有单个地区的表,那么为了完成连接,会把地区服务器的数据,传送到中央服务器,然后再进行关联。 这里有一个联接提示:remote。 比如: select * from 本地的a表 inner join 远程的b表 这个语句一般就会把,远程的b表数据加载到本地,然后进行关联的,适合远程的表,数据量较小的情况。 如果架上remote,比如: select * from 本地的a表 inner remote join 远程的b表 那么就会把本地的数据,加载到远程 ,在进行关联,适合本地表的数据量比较小的情况。 这个是相关的文档,你可以参考的哈: http://msdn.microsoft.com/zh-cn/library/ms173815(v=sql.105).aspx
习惯性蹭分 2013-10-21
  • 打赏
  • 举报
回复
引用 1 楼 yupeigu 的回复:
远程查询时,看你在那台服务器上执行。 比如,如果你在中央服务器上运行查询,而这个查询需要用到多个地区数据库上的数据,那么一般会把各个地区上需要的数据,加载到中央服务器上,进行表关联,得出结果。 所以,如果数据量比较大,那么大部分时间可能都花在了网络传输上了。
感谢小当家的回答,现在在中央服务器运行的查询只涉及到单个地区服务器的数据。所以这个过程应该不会把原表的数据加载过来。只会传输查询后的结果集。对吗?
LongRui888 2013-10-19
  • 打赏
  • 举报
回复
不过,像上面说的,也可以把数据,通过数据库复制,复制到中央服务器,这样的好处是, 如果你经常查询的话,就不会把时间,都浪费在网络传输数据上,因为你就算同一个查询,隔一段时间运行两遍,可能第二次运行时,数据已经不在内存中了,这个时候还得再通过网络,传输一次,这样相当于做了无用功。 所以,我觉得,要是查询次数较多,还是使用数据库的复制。 要是,查询次数较少,那就通过分布式查询来做
Andy__Huang 2013-10-18
  • 打赏
  • 举报
回复
--创建链接服务器 exec sp_addlinkedserver 'server_lnk','','SQLOLEDB','远程服务器名或ip地址' exec sp_addlinkedsrvlogin ' server _lnk','false',null,'用户名','密码' exec sp_serveroption ' server _lnk','rpc out','true' --这个允许调用链接服务器上的存储过程 go --查询示例 select * from srv_lnk.数据库名.dbo.表名 --导入示例 select * into 表 from srv_lnk.数据库名.dbo.表名 go --以后不再使用时删除链接服务器 exec sp_dropserver 'srv_lnk','droplogins' --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名) --导入示例 select * into 表 from openrowset('SQLOLEDB' ,'sql服务器名';'用户名';'密码' ,数据库名.dbo.表名)
發糞塗牆 2013-10-18
  • 打赏
  • 举报
回复
合并复制,把多个地区合并到中央服务器,借助sqlserver自身的技术,能够减少很多开销
LongRui888 2013-10-18
  • 打赏
  • 举报
回复
远程查询时,看你在那台服务器上执行。 比如,如果你在中央服务器上运行查询,而这个查询需要用到多个地区数据库上的数据,那么一般会把各个地区上需要的数据,加载到中央服务器上,进行表关联,得出结果。 所以,如果数据量比较大,那么大部分时间可能都花在了网络传输上了。

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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