ストアドプロシージャを設計するとき、カーソルベースの操作よりもスケールに基づいた操作の方が優れていると言われています。DBストアドプロシージャの操作デザイン - カーソルベースのセットに基づく
これはなぜか簡単に説明できますか?
リレーショナルデータベースエンジンでは、すべての操作(ストアドプロシージャまたはしないかどうか)は、通常*スケールは良好これらのエンジンは、セット - を実行するために最適化されているという理由だけでセットベースのロジックを使用しますように簡潔に私が管理できるよう
ストアドプロシージャを設計するとき、カーソルベースの操作よりもスケールに基づいた操作の方が優れていると言われています。DBストアドプロシージャの操作デザイン - カーソルベースのセットに基づく
これはなぜか簡単に説明できますか?
リレーショナルデータベースエンジンでは、すべての操作(ストアドプロシージャまたはしないかどうか)は、通常*スケールは良好これらのエンジンは、セット - を実行するために最適化されているという理由だけでセットベースのロジックを使用しますように簡潔に私が管理できるよう
ベースの操作。
一般に、1または1,000,000行に影響を与えるかどうかにかかわらず、エンジンのアトミック操作では固定リソースコスト(かなり高い場合があります)があります。
データベースエンジンがアトミック操作コストの上にカーソルの状態を維持する必要があるため、カーソルのコストがさらに高くなります。
*手続き型ロジックがセットベースよりも優れたパフォーマンスを発揮する場合、問題のいくつかのエッジケース/クラス(正確にはRDBMSに依存します)が存在します。
RDMSはすべて、行ベースではなくセットベースの操作に最適化されています。ほとんどの場合、セットベースのソリューションは行ベースのパフォーマンスを上回ります。たとえば、SELECT * FROM table1
でも、カーソルで同じ処理を何倍も高速に実行できます。ただし、カーソルソリューションの方が優れている場合があります。たとえば、一部のRDMS(つまり、SQLServer 2005)でセットベースのアプローチを使用して実行中の集計を計算するには、データを数回再走査する必要がありますが、カーソルベースでは1回しか行いません。
カーソルを使用する必要があるもう1つのケースは、アプリケーションのビジネスロジックが各行を個別に処理する必要がある場合です。