0

我有一个与 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

工作得更快。

我关心的是执行计划。对于第一个查询,估计子树成本是 0.16,第二个是 3.36。第二个查询执行“远程扫描”。我不知道这是好还是不好。

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

4

1 回答 1

1

给定你的执行计划(我是一个 oracle 人而不是 sql server 人),第一个似乎是在 sql server 端进行全表扫描和过滤(计算标量?),而第二个是 sumiting过滤器到 oracle 和这么快。

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

如果第二个对你有好处,真的有问题吗?

于 2012-11-11T19:38:45.680 回答