【问题标题】:EXECUTE AS vs SELECT FROM linked serverEXECUTE AS vs SELECT FROM 链接服务器
【发布时间】:2012-10-31 07:23:00
【问题描述】:

我有一个与 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 个查询)。

【问题讨论】:

  • 共享执行计划怎么样?
  • 不确定如何在此处嵌入执行计划,但它们非常简单:` 1st) SELECT (Cost 0%)
  • 刚刚阅读 T. Kyte 关于 Oracle 开发和架构的书。 :something(绑定变量)不是他对查询的第一改进,承诺更快的结果时间吗? @something 一样吗?还是你第一次查询后缓存了结果,现在:something是缓存结果的受益者? (我对数据库了解一点,但对 Oracle 的细节了解不多,所以所有这些都是一个开放的问题)。祝大家好运。

标签: sql-server oracle oracle11g linked-server


【解决方案1】:

给定你的执行计划(我是一个 oracle 人而不是 sql server 人),第一个似乎是在 sql server 端进行全表扫描和过滤(计算标量?),而第二个一个是将过滤器与oracle相结合,速度更快。

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

如果第二个对你来说表现不错,真的有问题吗?

【讨论】:

  • 确实是这样(Oracle管理员告诉我他也有同样的感觉),我不明白为什么SQL server说第二个查询更“贵”,一个不会这不会导致整体 sql server 性能下降(Oracle server - 主要用于业务并且获得了非常好的硬件,而 SQL server 位于小型虚拟机上,对更多资源的期望不大:()。
  • 在 Oracle 世界中(在 sql server 中相同),每个计划都与其成本相关联。 cost 不应该用于决定 sl 是否“昂贵”,因为它只是一种内部排名算法,用于确定在考虑所有计划时哪个计划“获胜”。如果第二个响应速度很快(并且您可以在 v$sql + v$sql_plan 中检查计划 oracle 方面......并且您希望在某事=:b1 上查看索引查找),那么它就很好了,您已经尽你所能。忽略“成本”:按 IO 和响应时间进行调整。
猜你喜欢
  • 2013-05-17
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2020-05-11
  • 1970-01-01
相关资源
最近更新 更多