SQLServer访问Oracle查询性能问题解决
2014-11-25 17:48
260 查看
原文:SQLServer访问Oracle查询性能问题解决
SQLServer访问Oracle实现 可参考这篇文章/article/4674837.html
目前的查询语句就是一个简单的带where条件的查询语句,类似如下:
存在的问题是查询速度非常慢,前台报超时。所以准备提升下查询的性能
然后,在SSMS客户端中查看了执行语句的执行计划,如下:
![](http://images.cnitblog.com/i/88922/201403/241906362172666.png)
从执行计划可以看出,过程没有和自己设想的那样,原以为SQLServer会将整个查询提交到Oracle服务器执行。而实际在远程查询时,并没有加入where条件,而是将结果返回到本地后,在本地执行筛选(有一个筛选器)
这样速度肯定会非常慢,因为查询没有使用到索引查找,需要将远程数据全部传输到本地后才执行筛选,相当于全表扫描,还多了网络传输的时间。
但问题是OpenQuery不支持参数。见微软MSDNhttp://technet.microsoft.com/zh-cn/library/ms188427.aspx
但好在我们可以另辟蹊径,通过拼接动态SQL的方式实现传递查询参数。
OpenQuery使用参数可参考这篇文章:http://www.cnblogs.com/Dannier/archive/2011/09/21/openquery.html
通过这种方式优化后,执行计划变为如下:可以看到实际返回的行数很少了
![](http://images.cnitblog.com/i/88922/201403/250843279205715.png)
查询速度提升明显,由原来的前台超时到现在的毫秒级。
小小的得意一下^_^,欢迎拍砖。如有其他方法,求分享,谢谢!
1. 问题
系统有个模块,需要查询Oracle数据库中的数据。目前是通过建立链接服务器实现的。SQLServer访问Oracle实现 可参考这篇文章/article/4674837.html
目前的查询语句就是一个简单的带where条件的查询语句,类似如下:
SELECT * FROM LINKED_NAME..ACCOUNT_NAME.TABLE_NAME WHERE COLUMN1=SID;
存在的问题是查询速度非常慢,前台报超时。所以准备提升下查询的性能
2. 分析
首先,确定远程Oracle的表在筛选字段上是否存在索引。经确认,存在索引。然后,在SSMS客户端中查看了执行语句的执行计划,如下:
![](http://images.cnitblog.com/i/88922/201403/241906362172666.png)
从执行计划可以看出,过程没有和自己设想的那样,原以为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
通过这种方式优化后,执行计划变为如下:可以看到实际返回的行数很少了
![](http://images.cnitblog.com/i/88922/201403/250843279205715.png)
查询速度提升明显,由原来的前台超时到现在的毫秒级。
小小的得意一下^_^,欢迎拍砖。如有其他方法,求分享,谢谢!
相关文章推荐
- SQLServer访问Oracle查询性能问题解决
- 解决SQLSERVER查询连接数据库表问题:OLE DB 访问接口 "MSDASQL" 为列提供的元数据不一致
- Oracle不可访问问题的解决
- 分页显示问题的解决方法(jsp,sqlserver,mysql,oracle)
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- Oracle9查询语句报无法访问oracore9.dll错误的解决方法
- VC++中使用ADO访问Oracle遇到的问题及解决方法(待续)
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- IIS访问WEB遇到 System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本。问题解决方案。
- 如何解决 JMeter 通过 JDBC 访问 Oracle 的问题
- Win2003下ASP.net访问Oracle 9.2的问题解决
- Oracle数据类型引起的性能问题(已经解决)!
- SQLServer不存在或访问被拒绝问题的解决
- 如何解决 JMeter 通过 JDBC 访问 Oracle 和 MySQL 的问题 (留言中有 Test Plan 实例下载)
- 分页显示问题的解决方法(jsp,sqlserver,mysql,oracle)
- 分页显示问题的解决方法(jsp,sqlserver,mysql,oracle)
- 如何解决ADO.NET访问Access数据库出现"操作必须使用一个可更新的查询"的问题(非原创,摘自书中)
- Oracle9查询语句报无法访问oracore9.dll错误的解决方法
- 解决oracle 10g Enterprise Manager无法访问的问题
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行