原文:SQLServer访问Oracle查询性能问题解决

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查询性能问题解决相关推荐

  1. oracle查询性能表关联,通过调节索引 优化Oracle关联查询性能

    本文引用一套实验室信息管理系统(LIS)使用的数据库,假设我们要查询2008年11月做检验的患者记录,条件是大于80岁,姓周的患者,最终结果按检查日期进行倒序排列.要使用的表有三个: ◆lis_rep ...

  2. Oracle查询性能优化

    数据库最基本的任务是存储.管理数据,而终端用户唯一能看到的数据库特性就是其性能:数据库以何速度处理某一指定查询的结果,并且将结果返回到用户所用的工具和应用程序.从大多数系统的应用实例来看,查询操作在各 ...

  3. SQLSERVER 和 ORACLE 查询数据库文件大小

    SQLSERVER: SQLSERVER一个库的文件分为数据文件(行数据)和日志文件两个文件,详情可以在数据库的属性->文件中查看. 在资源管理器中打开文件所在路径可以直接看到这两个文件 但是, ...

  4. MySQL系列-- 4. 查询性能优化

    4. 查询性能优化 4.1 为什么查询速度会变慢 快速查询取决于响应时间 如果把查询看成是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消 ...

  5. oledb vc访问mdb数据库_一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE...

    这是一个.net下操作数据库(结构数据库)的工具类,支持sqlserver.oracle.mysql.postgres.sqlite.access等常见数据库. 注意:它并不是一个orm工具(常见的o ...

  6. sqlserver访问接口无Oracle,SQLServer通过链接服务器访问Oracle

    数据库:SqlServer2005 .Oracle 11gR2 系统环境:windows Server 2008R2 32位. 最近在做项目时,需要通过sql的链接服务器访问Oracle.以前弄过sq ...

  7. 查询性能优化(使用 Explain 进行分析、优化数据访问、重构查询方式)、存储引擎(InnoDB/MyISAM)

    1.查询性能优化 1.1 使用 Explain 进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句. 比较重要的字段有: select ...

  8. MySql查询系统时间,SQLServer查询系统时间,Oracle查询系统时间

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. MySQL查询系统时间 第一种方法:select current_date: MySQL> s ...

  9. mysql查询数据库第一条记录_SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...

    Sqlserver 获取每组中的第一条记录 在日常生活方面,我们经常需要记录一些操作,类似于日志的操作,最后的记录才是有效数据,而且可能它们属于不同的方面.功能下面,从数据库的术语来说,就是查找出每组 ...

最新文章

  1. 可以打游戏的计算机,还在用笔记本玩游戏?台式机才能给你极致享受
  2. python调用sdk的文章_如何使用 python 接入虹软 ArcFace SDK
  3. python返回长度值_Python 文件 truncate() 方法(截断返回截取长度)
  4. [css] 为什么伪类的content不能被选中?
  5. 一起来做个免登录资源导航小程序!
  6. http模拟登陆及发请求
  7. 安全的API接口解决方案
  8. 怎么把python从c盘移到d盘_如何转移Pycharm的设置或者缓存到其他盘
  9. switchHosts下载地址
  10. 菜鸟python实例_菜鸟学Python,双手奉上老司机给上路新手总结的Python实战问题…...
  11. R语言安装包的几种方法
  12. BT6无线破解+局域网共享(附BT6下载地址)
  13. 数据结构:树(Tree)【详解】
  14. UCOS操作系统——任务内嵌信号量(十一)
  15. css的外链写法,纯CSS代码为外链增加图标
  16. c语言键盘输入今年的某月某日,题目:输入某年某月某日,判断这一天是这一年的第几天?...
  17. excel取末尾数字_Excel公式技巧11: 从字符串中提取数字——数字位于字符串末尾...
  18. 【修真院“善良”系列之四】怎么识别招聘中的传销公司?
  19. excel平均值公式_必学的6个Excel平均值公式
  20. 梯度下降法计算二次函数极值、拟合一次曲线、拟合二次曲线

热门文章

  1. 解决python3缺少zlib的问题
  2. ffmpeg相关资源
  3. twitter中处理网页被iframe方式
  4. Uncaught SyntaxError: missing ) after argument list 错误解决
  5. win10修改时间同步服务器,解决win10时间服务器同步问题|重置win10时间服务配置...
  6. m6000查看端口状态_M6000常用命令
  7. 调试技术: Linux core dump file
  8. Node.js--Stream
  9. 一个优雅的报警处理系统范例
  10. 开源中国 Android 客户端 v2.8.4 代码开源