最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

SQLServer访问Oracle查询性能问题解决

来源:动视网 责编:小采 时间:2020-11-09 07:38:49
文档

SQLServer访问Oracle查询性能问题解决

SQLServer访问Oracle查询性能问题解决:1. 问题 系统有个模块,需要查询Oracle数据库中的数据。目前是通过建立链接服务器实现的。 SQLServer访问Oracle实现 可参考这篇文章http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.ht
推荐度:
导读SQLServer访问Oracle查询性能问题解决:1. 问题 系统有个模块,需要查询Oracle数据库中的数据。目前是通过建立链接服务器实现的。 SQLServer访问Oracle实现 可参考这篇文章http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.ht


1. 问题 系统有个模块,需要查询Oracle数据库中的数据。目前是通过建立链接服务器实现的。 SQLServer访问Oracle实现 可参考这篇文章http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.html 目前的查询语句就是一个简单的带wh

1. 问题

  系统有个模块,需要查询Oracle数据库中的数据。目前是通过建立链接服务器实现的。

  SQLServer访问Oracle实现 可参考这篇文章http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.html

  目前的查询语句就是一个简单的带where条件的查询语句,类似如下:

  

SELECT * FROM LINKED_NAME..ACCOUNT_NAME.TABLE_NAME WHERE COLUMN1=SID;

  存在的问题是查询速度非常慢,前台报超时。所以准备提升下查询的性能

2. 分析

  首先,确定远程Oracle的表在筛选字段上是否存在索引。经确认,存在索引。

  然后,在SSMS客户端中查看了执行语句的执行计划,如下:

  

  从执行计划可以看出,过程没有和自己设想的那样,原以为SQLServer会将整个查询提交到Oracle服务器执行。而实际在远程查询时,并没有加入where条件,而是将结果返回到本地后,在本地执行筛选(有一个筛选器)

  这样速度肯定会非常慢,因为查询没有使用到索引查找,需要将远程数据全部传输到本地后才执行筛选,相当于全表扫描,还多了网络传输的时间。

3. 解决

  其实只要能将带where条件的查询语句一并提交到Oracle服务器执行远程查询,就可以解决性能问题了。

  但问题是OpenQuery不支持参数。见微软MSDNhttp://technet.microsoft.com/zh-cn/library/ms188427.aspx

  

  但好在我们可以另辟蹊径,通过拼接动态SQL的方式实现传递查询参数。

  OpenQuery使用参数可参考这篇文章:http://www.cnblogs.com/Dannier/archive/2011/09/21/openquery.html

  通过这种方式优化后,执行计划变为如下:可以看到实际返回的行数很少了

  

  查询速度提升明显,由原来的前台超时到现在的毫秒级。

  小小的得意一下^_^,欢迎拍砖。如有其他方法,求分享,谢谢!

文档

SQLServer访问Oracle查询性能问题解决

SQLServer访问Oracle查询性能问题解决:1. 问题 系统有个模块,需要查询Oracle数据库中的数据。目前是通过建立链接服务器实现的。 SQLServer访问Oracle实现 可参考这篇文章http://www.cnblogs.com/gnielee/archive/2010/09/07/access-oracle-from-sqlserver.ht
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top