私はカーソルがかなりslowであることを読んでいました。私はストアドプロシージャを最適化しようとしており、そのうちの1つはカーソルを使用します。頻繁に私のアプリケーションから呼び出され、多くのユーザー(20000)と行が更新されます。私は別のものとして別のものを使うべきかもしれないと思っていた。カーソルは本当にどれくらい遅く、より良い選択肢になるでしょうか?
私がやろうとしているのは、レコードのリストを取得し、各行の値に応じて操作することです。だから、例えばのために、私たちは言うてきた -
Employee - Id,Name,BenefitId,StartDate,EndDate
をそうbenefitIdに基づいて、私は開始日と終了日と更新従業員の詳細の間の日付を使用して、異なる計算を行う必要があります。私はちょうど私の状況についてのアイデアを与えるために、この人為的な例を作っています。
あなたの考えは?一時テーブルやユーザー定義関数を使用するようなカーソルの方がよいでしょうか?あなたはいつそれらを選ぶべきですか?あるいは、カーソルを使用するべきではありませんか?皆さん、ありがとうございました。
多くの場所では、すべてのデータベースアクセスがストアドプロビジョニングを通じて行われる必要があります。また、ストアドプロシージャで複雑な処理を行う方が、dbaがアプリケーションにこのようなものを置くよりもパフォーマンスを調整できる方が良い方法です。さらに、アプリケーションから実行されるほとんどすべてのカーソルを、セットベースのロジックに簡単に置き換えることができます。 dba指向の管理タスクを除いて、カーソルはほとんど必要ありません。1つ以上のテーブルから挿入、更新、または削除する場合は、100%に非常に近いセットベースの方法で行うことができます。 – HLGEM
私は人々がなぜビジネスロジックをデータベースから守ることを強く求めているのか理解していません。私はまだ、ロジックがなくても有意義な方法でデータを本当に操作できるシステムに遭遇しました。データベースベンダーよりもはるかに頻繁にプログラミング言語を変更していることに気をつけてください。 – NotMe
これは多分遠近法の問題であり、言語の選択です。プログラマの母国語は、その時点でどのようなHL言語でプログラミングされようとしています。 DBAの母国語はSQLです。それは、おなじみの人に戻ってしまうという意味です。 – SRM