Согласитесь с @Catcall - не видя код, сложно ответить на этот вопрос осмысленно.
Однако, в общих чертах, люди часто говорят, что курсоры медленнее, чем другие методы SQL, в том, что некоторые разработчики используют курсоры, где будет работать операция на основе множеств.
Например, если ваш план (в псевдокоде, при отсутствии фактического механизма БД или схемы)
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-сервер.
Сказав все это - в большинстве случаев вы не заметите разницу в реальных сценариях. Кроме того, стоит отметить, что если ваша база данных сильно загружена или ваш запрос выполняется медленно (например, при переборе курсора с миллионами записей), такой подход может создать узкое место на сервере БД. Вообще говоря, вы хотите избежать долговременных заданий в вашей базе данных, если это вообще возможно - лучше разделить их на множество небольших заданий.