1

実行計画に問題はありませんでした。さらに、私が理解しているように、SQL Server 2000 は、既存の実行プランの T-SQL ステートメントに対して新しい T-SQL ステートメントを認識することにより (すべての SQL ステートメントの実行プランを保持することにより)、ストアド プロシージャのパフォーマンス上の利点の多くをすべての SQL ステートメントに拡張しました。ストアド プロシージャの実行プランだけでなく、プロシージャ キャッシュ)

これは、合理的なテーブル結合、トランザクションが含まれていないか、クエリ内で参照されているリンク サーバーがなく、WITH (NOLOCK) テーブル ヒントが適用されている、かなり単純な SELECT ステートメントです。ストアド プロシージャは dbo によって作成され、ユーザーは必要なすべてのアクセス許可を持っています。

だから私の質問はこれです:

ストアド プロシージャを介して同じ T-SQL を実行すると、クエリの実行に数秒しかかからず、その後数分かかる理由として考えられるものは何ですか?

4

1 に答える 1

2

次の 2 つの理由が考えられます。

  • ストアド プロシージャが古い実行プランを使用している可能性があります。ストアド プロシージャを削除して再作成すると、その実行計画が再コンパイルされます。
  • ストアド プロシージャは、一般的なケースに合わせて最適化されています。特定の値を使用してクエリを実行すると、SQL Server はそれらの値に対してのみ、より適切な実行プランを見つける可能性があります。この場合、OPTION (OPTIMIZE FOR UNKNOWN)手順のないバージョンに追加すると遅くなるはずです。
于 2010-04-14T22:51:27.317 に答える