現在、私はSQL Serverでもう少し作業しなければならず、多くのリソースを使用しているため、カーソルが遅いために、カーソルとその回避方法を読んだことがあります。この場合、カーソルよりも「中」の方が速いのはどうでしょうか?
今私はカーソルでいくつかの基本的なことをやろうとし、whileループで再構築しようとしました。最後に、カーソルはwhileループよりも10倍高速でしたが、リソースは約60〜40%でした。
私は奇妙な例題の演習をしている可能性がありますか?
これは私が自分自身を与えた運動についてです:「名前」、約1000名を含む:テーブルを
- 反復、このテーブルは、1つの列があります。
- それぞれの名前を個別に印刷します。
カーソルではかなり簡単ですが、whileループではカウンタが必要です。テーブルにインデックスがないので、私はそれを使用することはできません。だから、私の解決策は、私は一時テーブルを作成し、テーブルにすべての名前を追加し、インデックス(または行番号)を含めることでした。しかし、挿入操作には約95%の時間がかかり、最後にwhileループはカーソルより遅くなります。
編集:私は試み
もう一つはWITH Names_Rows AS...
を使用するようにし、カラムとしてRow_Number()
を添加し、次いでNames_Rows
構築を反復するwhileループを使用します。しかしそれはもっと長くかかった。
インデックスを使用しないでテーブルを繰り返し処理する方法が簡単ではありませんでしたか?
リストをループして各名前を個別に印刷するという作業は、通常はデータベース内で実行されません。それは通常UIで行われます。私たちは一般的に物事をループしたり、一度に1つのレコードで操作を実行したりしません。代わりに、私たちはセットの点で物事を考え、セットで操作を実行します。 – DOK
@DOK:私の小さな「エクササイズ」は典型的ではないかもしれませんが、データベース上のテーブルを直接ループする必要がある現実の状況に基づいています。 – Feroc
テストコードを記入してください。どのようなビジネス上の問題をシミュレートしようとしていますか?テーブル内のすべての行を取得するには、select * from tableNameを使用します。 – Paparazzi