EXECUTE AS vs SELECT FROM链接服务器

时间:2012-11-11 18:25:38

标签: sql-server oracle oracle11g linked-server

我有一台与MS SQL集成的Oracle服务器作为链接服务器。目前我正在进行查询优化。我发现了那些写成如下的查询:

SELECT colName1, colName2, .. 
  FROM ORACLE.TBL_TBLENAME 
 WHERE something = @something 

工作很慢。另一方面,相同的查询写为:

EXECUTE ('SELECT colName1, colName2, .. 
            FROM TBL_TBLENAME 
           WHERE something :something',@something) at ORACLE

工作得更快。

我关心的是执行计划。对于第一个查询,Estimated Subtree Cost为0.16,第二个查询为3.36。第二个查询执行“远程扫描”。我不知道这是好还是不好。

该查询应该经常运行(在1分钟内大约20个查询)。

1 个答案:

答案 0 :(得分:1)

给你执行计划(我是一个oracle人而不是sql服务器人),看来第一个是在sql server端进行全表扫描和过滤(计算标量?),而第二个一个是将过滤器与oracle相加并且更快。

是oracle表上最新的统计信息(也许它认为表中只有几行,所以sql server决定更好地只获取整个表并在本地进行处理?)并且有什么直方图涉及“某事”吗?

如果第二个对你有益,那真的有问题吗?