0

昨日、アプリケーションで書き直し/最適化しようとしている手順について質問しました。ユーザーが指定できる一連の基準を備えた検索フォームから外れています。40 個のパラメーター。そのうちの 3 つは、Table 変数を返す UDF に渡す Guid の長い文字列で、そのうちの 3 つすべてをJOINメインFROMステートメントに含めます。

このクエリの多くは動的 SQL を使用して行いました。全体を書き直す主な理由の 1 つは、それが動的 SQL であるためです。動的 SQL について私がこれまでに読んだことはすべて、特に実行計画と最適化に関して悪いことです。すると、この2つのような記事に出くわし始めます....

最も単純な解決策が最善の解決策ではない場合もある

Erland Sommarskog - T-SQL の動的 SQL 条件

動的 SQL はセキュリティと最適化に悪いといつも思っていましたが、可能な限りシステムから削除しようとしました。現在、システムで最も実行されているクエリ (メインの検索クエリ) を再構築しており、すべての動的 SQL を取り除くことが役立つと考えました。

基本的に交換

IF(@Param1 IS NULL)
   @SQLString = @SQLString + " AND FieldX = @Param1"
...execute the @SQLString

1 つの大きな SQL ブロックで

WHERE (@Param1 IS NOT NULL AND FieldX = @Param1)

これらの 2 つの記事を読むと、これは私に不利に働くように思えます。まだ 2k5 であるため使用できません。使用できRECOMPILEたとしても、このストアド プロシージャは非常に頻繁に使用されます。本当に動的 SQL でこのクエリを記述しますか? 実行計画を保存できない場合、どのように高速化できますか?

4

0 に答える 0