1

I need to retrieve some fields from a table that match a given ID. Currently, I build a sql statement

SELECT a, b, c 
FROM d 
WHERE id = @id

Then execute it using the DataReader.

I could also write a stored proc that takes the id as parameter.

I wanted to know which is more performance friendly.

EDIT: I am using a parameterized query, edited the question to reflect that.

4

4 に答える 4

5

彼らは通常、ほぼ同じパフォーマンスを発揮します。

これが非常に頻繁に呼び出されると、違いが生じる可能性があることに注意してください。SPがプリコンパイルされているのに対し、SQLコードは送信されるたびに解析する必要があります(ただし、ステートメントがキャッシュされていると認識された場合は必ずしも再コンパイルする必要はありません)が、統計が再コンパイルされないため、最適ではないインデックスの選択を引き起こす可能性があります呼び出しごとに評価されます。

于 2012-04-17T15:05:16.630 に答える
4

最新バージョンの SQL Server では、パフォーマンスの点で事実上違いはありません。SQL を動的に構築することは、一般にノーノーと見なされます。パラメーター化された SQL を使用して SQL インジェクションを回避する必要がありますが、それとストアド プロシージャは通常、同等のパフォーマンスを提供します。

于 2012-04-17T15:05:13.610 に答える
1

文字列を連結して作成された sql ステートメントの代わりに準備済みステートメントを使用する場合、ストアド プロシージャと準備済みステートメントのパフォーマンスに違いはありません。どちらも初回実行時にコンパイルされ、SQL サーバーのクエリ プランにキャッシュされます。

于 2012-04-17T15:07:19.737 に答える
-1

ストアド プロシージャを実行する方が良いでしょう。1) 実行計画が事前にコンパイルされてキャッシュされているため、2) データベースを SQL インジェクション攻撃にさらさないためです。コードサンプルがなければ、現在どのように行っているかを言うことは不可能ですが、単一の文字列を作成して実行するように要求しているだけだと思いますが、これは悪い考えです。

于 2012-04-17T15:05:39.740 に答える