私のプロジェクトでは、ハードコードされたクエリをストアドプロシージャに変換することが始まりましたが、これを使用する利点がわかりました。ただし、ストアドプロシージャを使用しないでください特定のシナリオがありますか?ハードコードされたクエリよりもストアドプロシージャを使用する利点はいつですか?
答えて
あり、主にされています私はストアドプロシージャが非常にまれな条件を除いて常に意味をなさないと思う皆に送る。彼らは一般的に、殺人犯を止めるために人を殺すことに対して法律を制定する必要があるという行に沿った誤りを挙げています。
http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx
上記のリンクは、ストアドプロシージャを使用するとき、およびないときは、およそ本当に良いの引数の多くを示しています。その中でも、特にC#では、フレームワークがあなたに与えるすべてのものを無視しています。メンテナンスの悪夢に賛成して、クエリーのための合理的なUI決定を持つ力という点では、
データベースデザインやコンパイルされたコードなどの変更により、幾分古くなった投稿 – Lloyd
ほとんどありません。それ以来、メジャーデータベースのコンパイルされたコードに変更はありません。 – TomTom
@TomTomこれは12年前のSQL Serverであり、2012年の差し迫った差はありませんが、2000年から2008年のR2には大きな変化がありました。 – mattytommo
通常、ストアドプロシージャを使用する方が良いです。それらを使用する場合、主な利点は、ストアドプロシージャを使用してクエリを複数回実行すると、再利用のための実行計画が保持されることです。
それらを使用する利点の多くがありますが、参考のためにここを参照してください:http://blog.sqlauthority.com/2007/04/13/sql-server-stored-procedures-advantages-and-best-advantage/
編集を:記事は2007年からであるが、重要な原則は、標準的なブログと同じ
この回答のキーワードは「一般的」なので、一般的にはストアドプロシージャを使用する方が良いと私は同意できませんが、一般的にはそれを使用する方が良いということに同意することができます...私はここでは、私はそうではありません。偉大な記事のリンク+1。 –
この質問には多くの質問が寄せられ、hereは件名の良い投稿です。
しかし、私は個人的にはストアドプロシージャの複雑なロジックを後で維持するのが難しく、それを置くのに最適な場所ではないと言います。 ORMマッパーはかなり広く使用されており、より大きなもの(Hibernate/NHIbernate、EFなど)はすべてオプトマイズクエリを生成し、優れたキャッシュ戦略を持っています。
多くの多くのprocが格納されているシステムは避けてください(私は4kを超えるprocsが格納されたシステムを見てきました。
編集は
私は私の答えに拡大している必要があり、これらはサーバ自体で実行されるため、大きな用途を持っている大量のデータがする必要があるところ、今、保存されprocsのは、しかし、彼らは素晴らしいですか、そうだろう処理され、ネットワーク接続経由で買い戻されず、同じ結果を得るためにデータベースへのいくつかのラウンドトリップが必要な場合は、ストアドプロシージャでoptomiseする傾向があります。ほとんどのORMSはsprocを実行してマッピング結果を戻すことができます。 orm溶液の豊かさへ。
しかし、ORM経由でsprocsを排他的に実行していることがわかった場合、ormは本当に必要ありません。だから、今日はパフォーマンスのオプトマイゼーションです。大きなデータセットが関係する場所。また、デベロッパーとDBAの両方から誤解された意見や習慣が多い傾向にあり、戦争のような状態につながる可能性があります。「すべてのコードはsprocsでなければなりません」または「すべてのコードを生成する必要がありますorm "、これは愚かな状態です。
私が指摘しておかなければならないことは、私はそれらのバグのすべての種類のsprocsを見ていると私たちの自然のソフトウェア開発者は通常、私たちは思考していない傾向がないSQLを書くために"セットのような"方法。それは私たちの専門性ではない偉大なSQLコードを書くことはできません。
コードパスを一度下っていくsprocが何回目に見えますか?その次の時間にそのパスを下がらないため、結果としてプランがキャッシュされ、最適ではありません。それをたくさん見ました。
遅いです。 NHibernate asetc。 - あなたの趣味によっては、BlToolkit/Linq2DBの方がはるかに速くなる可能性があります。 – TomTom
Linq2Sql!= Linq2DB –
ベストプラクティスは、ストアドプロシージャを使用することです。
- 分離作業。
- 再利用可能(SQLから直接テストすることができます)
- 多くの目的で1つのプロシージャを使用すると、ソフトウェアに何らかの変更が生じた場合に時間が短縮されます。
- DLLの特別なプログラム内のコードを置き換える必要はありません。
天気ありがとうございましたSANE te4amsは、これら4つのベストプラクティスが関連性があると考えている人々を怒らせます。 – TomTom
申し訳ありませんが、この考え方は時代遅れです。 –
- 1. UTF-16よりもUTF-8を使用する利点は何ですか?
- 2. Prologを他の言語よりも使用する利点は何ですか?
- 3. Python 3を使用する利点/利点は何ですか?
- 4. "定義された" ORM:をPHPで使用する利点?
- 5. 更新されたsitemap.xmlを使用する利点は何ですか?
- 6. ActionFormよりもDyaActionFormの利点は?
- 7. 整数または浮動小数点数よりもNSNumberを使用する利点?
- 8. QStandardItemModelよりもQAbstractItemModelの利点は何ですか?
- 9. なぜ角2を使用するのですか?角度1よりも利点は何ですか?
- 10. 普通のsyslog()よりもlog4cxxを使う利点は何ですか?
- 11. 共有メモリを使用している場合、スレッディングよりもプロセスに利点はありますか?
- 12. XSDを定義する際に属性よりも属性グループを使用する利点は何ですか?
- 13. PostgreSQLクエリで複数の関数呼び出しでハードコードされた値を再利用する
- 14. BSTよりもB +ツリーの利点?
- 15. plsqlよりもJDBCの利点?
- 16. 保存されたprocsでPRINTを使用することに不利な点はありますか?
- 17. TextFieldよりURLFieldを使用する利点?
- 18. arrayWithCapacityを使用する利点は、arrayを使用することよりですか?
- 19. これはRails/Django /などよりもNodejs(expressjs)の利点を実証する良い方法ですか?
- 20. '='を使用したMysqlクエリは 'LIKE'よりもはるかに遅い
- 21. ステートメントの使用 - これはsql接続よりもSQLアダプタよりも便利ですか?
- 22. イニシャライザリストを使用する利点は?
- 23. スプリングステレオタイプを使用する利点は?
- 24. SQLAlchemyでpsycopg2を使用する利点
- 25. メソッドシグネチャでジェネリックを使用する利点は何ですか?
- 26. C#でインターフェイスを使用する利点は何ですか?
- 27. サプライヤをJavaで使用する利点は何ですか?
- 28. pgbouncerでトランザクションプーリングを使用する利点は何ですか?
- 29. TextBox上でRichTextBoxを使用する利点は何ですか?
- 30. WebアプリケーションでEJBを使用する利点は何ですか?
ストアドプロシージャと比較したもの> 他の代替> –
は、ストアドプロシージャよりもコードのハードコーディングされたクエリ(SQL)と比較しています。 –