0

リンクサーバーとしてMSSQLと統合された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で、2番目のクエリの推定サブツリーコストは3.36です。2番目のクエリは「リモートスキャン」を実行します。これが良いかどうかはわかりません。

クエリはかなり頻繁に実行されることになっています(1分間に約20クエリ)。

4

1 に答える 1

1

実行プランを考えると(そして私はSQLサーバーの人ではなくオラクルの人です)、最初の人はSQLサーバーの最後で全表スキャンとフィルタリングを行っているようです(スカラーを計算しますか?)、2番目の人はサミットしていますオラクルへのフィルターと非常に高速です。

統計はOracleテーブルで最新ですか(おそらく、テーブルには数行しかないため、SQL Serverはテーブル全体をフェッチしてローカルで処理する方がよいと判断していますか?)、ヒストグラムはありますか? 「何か」に関わっていますか?

2つ目がうまく機能している場合でも、本当に問題はありますか?

于 2012-11-11T19:38:45.680 に答える