1


1

私は、すべてのCRUD操作を実行する1つのSPを使用しています。したがって、基本的に、必要なアクションに応じて同じSPを実行します。

例えば

 -  select exec USP_ORDER @ MODE = 'S'、@ ORDER_DATE = '2009/01/01'  -  update exec USP_ORDER @ MODE = 'U'、@other_paramsの場合 -  insert exec USP_ORDER @ MODE = 'I'の場合、@other_params  - 削除実行の場合USP_ORDER @ MODE = 'D'、@ ID = 100

私のDBを整理しておくために私は1つのビジネスオブジェクトにつき1つのSPしか持っていないことに感謝します。 しかし、最近私はパフォーマンスの問題を経験しました。 私の*質問*を踏まえて:このアプローチは正しいですか? それはパフォーマンス/適切な実行に影響を与えますか。 計画?

3 Answer


2


「間違った」クエリプランをキャッシュする可能性があるため、パフォーマンスに影響を与える可能性があります。 'parameter sniffing 'およびhttp://msdn.microsoft.com/ja-jp/library/のトピックを確認してください。 ms181055.aspx [クエリプランのキャッシュ]

編集:ジョンのコメントに応えて、あなたはトップレベルのSPにどのCRUD SPを呼び出すべきかを決定させることもでき、それからそれぞれが独自のキャッシュされたクエリプランを得るでしょう。


2


私はこれがもっとコーディング/デザインの好みの問題だと思います。

個人的には、物事をシンプルに保つことが大好きです。そのため、操作を別々のストアドプロシージャに分割することをお勧めします。

これはより透明になり、また将来あなたがしなければならないかもしれないどんなパフォーマンス調整も助けになるでしょう。 アップデート手順やロジックの実行速度が遅い場合は、ただちに原因として特定できますが、ロジックがさまざまなCRUD操作を含む大規模な手順の一部である場合は、問題の根本的な原因はそれほど明白ではありません。


0


私は単純化のファンでもあります(可能であれば)。

しかし、私がそのように決めた理由は:現在私は80のSPを持っています。 USP_Sample_Insert、USP_Sample_Select1、USP_Sample_Select2、USP_Sample_Delete)約400 SPになります。

SPインスタンスが私にとって悪夢であるならば、管理、ナビゲート、更新、そのような莫大な量の間でのパラメータの同期。

私にとっては - それを行うための唯一の合理的な場合はパフォーマンスです…​.