@Catcallに同意します-コードを見ずに、この質問に意味のある答えを出すのは難しいです。
ただし、大まかに言えば、カーソルが他のSQLメソッドよりも遅いとよく言われるのは、一部の開発者がセットベースの操作が機能する場所でカーソルを使用するためです。
たとえば、計画が(疑似コードで、実際のDBエンジンまたはスキーマがない場合)の場合
create cursor RecordsToUpdate
as
select *
from UserTable
where name like 'Codd%'
foreachRecord in RecordsToUpdate
set record.lastUpdatedDate = today
next
(うまくいけば)実行することで同じことを達成できることは明らかです
update UserTable
set lastUpdatedDate = today
where name like 'Codd%'
ただし、セットベースの操作が不可能な場合もあります。大まかに言えば、カーソルを作成し、ロジックを実行して、カーソルを閉じる方が効率的です。理想的には、ストアドプロシージャなどです。 。このアプローチは、PHPサーバーにデータを送り返すネットワークオーバーヘッドを制限します。
そうは言っても、ほとんどの場合、実際のシナリオの違いに気付くことはありません。また、データベースの負荷が高い場合、またはクエリの実行が遅い場合(たとえば、数百万のレコードを含むカーソルを反復処理する場合)、このアプローチによってDBサーバーのボトルネックが発生する可能性があることも指摘しておく価値があります。大まかに言えば、データベースに長時間実行されるジョブをできるだけ避けたいと考えています。それらを多数の小さなジョブに分割することをお勧めします。