咨询热线:
024-88614238
最新动态
相关新闻
异构数据库中用链接服务器查询数据

SQL Server提供了链接服务器用于分布式查询异构数据库。通过链接服务器可以链接到Oracle、Sybase、DB2、SQL Server等大型关系数据库,也可以连接到Access、Excel等文件数据库,甚至可以连接到目录服务(AD)、索引服务等。要链接到一种数据库需要使用相应的接口。微软为很多数据库提供了驱动接口,所以可以直接使用,但是对于没有提供驱动的数据库比如Sybase,则需要在服务器上安装对应数据库厂商提供的驱动。

  使用SSMS或者使用T-SQL语句配置成功链接服务器后便可通过:

  [服务器名].[数据库名].[架构名].[对象名] 的形式来访问数据库。

  例如要访问Oracle数据库中的一个表,则对应的查询语句是:

  SELECT *
  FROM ORA..MARY.ORDERS
  WHERE ORDERCODE=20080808008

  其中ORA是链接服务器名,MARY是用户架构名,ORDERS是表或视图名。运行查询SQL Server将返回查询的结果。

  但是当Oracle中的这个表数据量较大,比如有几十万行或者几百万行时,这个查询将会耗费很长时间。在SQL Server中运行该脚本可能要等上10秒、20秒或者1分钟、5分钟才可能查询出结果。但是如果将脚本在Oracle服务器上直接运行,则1秒钟不到就查询出结果了。造成这种情况的是SQL Server查询链接服务器的机制。

  不同的数据库对应的SQL语言是有所不同的。而对于Oracle数据库,通过链接服务器查询数据时,SQL Server为了保证T-SQL语句能够正常使用,但是Oracle数据库可能不认识这些T-SQL语句,所以SQL Server将会把查询中所用到的Oracle表数据从Oracle数据库读出来,一直到满足查询条件为止。对于代码16.18中的查询,SQL Server会将Oracle数据库中的ORDERS表全部读取到SQL Server数据库中,一边读取一边查找ORDERCODE = 20080808008的数据,直到全部数据读取完为止。对于上十万百万级的数据表来说,全部读取数据当然会造成系统缓慢。如果将上面的查询修改为如下的方式,则可能速度会快上很多。 

  SELECT TOP 1 *
  FROM ORA..MARY.ORDERS
  WHERE ORDERCODE=20080808008

  这是因为SQL Server从Oracle中顺序的读取ORDERS 表,一边读取一边比较ORDERCODE=20080808008一旦查找到了结果,由于我们写了TOP 1,所以系统判断满足条件了,就将结果返回,而不需要再继续向Oracle读取剩下的数据。但是这样做按照概率来说也要查一半的数据才能找到结果,仍然很慢。

  SQL Server为了解决这个问题,提供了OPENQUERY函数用于将查询语句直接送到链接服务器中,由链接服务器的数据库引擎负责查询,而不是由SQL Server将全部数据读取到本地来查询。OPENQUERY函数的语法格式为:

  OPENQUERY ( linked_server ,query )

  其中linked_server表示链接服务器名称的标识符。query在链接服务器中执行的查询字符串。该字符串的最大长度为8KB。于是上面的查询我们可以改写为如下的形式:

  SELECT *
  FROM OPENQUERY(ORA,
  SELECT * FROM MARY.ORDERS WHERE ORDERCODE=20080808008)

  这样条件查询将会在Oracle数据库中运行,Oracle将查询的结果返回给SQL Server,然后SQL Server再将结果返回给用户。

沈阳网络公司招聘

联系方式
地址:沈阳市东陵区
万柳塘路109甲1宏发 大厦525室
电话:024-24804848
8748636
15317796
102656105

友情链接(联系QQ:8748636) 沈阳网站制作| 沈阳网站制作| 沈阳SEO公司| 沈阳主机托管| 沈阳网络公司| 沈阳网站制作| 沈阳网站建设|
地址:沈阳市沈河区万柳塘路36-1 弘锦大厦412室 经理QQ:8748636 技术QQ:30999233 联系电话:024-88614238
Copyright? 2005-2013,沈阳海风网络科技有限公司 All Right Reserved. 版权所有 辽ICP备05004358号
【海风数据港】是专业沈阳服务器托管、沈阳网站制作、沈阳网站优化、沈阳网站建设的沈阳网络公司