Использование курсоров над циклами PHP - PullRequest
2 голосов
/ 16 сентября 2011

Любопытный вопрос возник у меня, когда я планировал новую серию дополнений к Приложению (ТМ) (как, например, охватывающий компанию бегемот).Имея набор результатов для каждой строки, для которой должна быть вызвана процедура, является ли более эффективным выполнение всего этого в MySQL путем создания процедуры, которая зацикливается на CURSOR и вызывает процедуру, или просто для извлечения набора в PHP исделать это "вручную"?Процедура будет выполняться несколько раз в течение короткого промежутка времени (~ 1 с для каждого вызова, около 2–3 вызовов на процедуру, несколько раз в день).

Причина, по которой я спрашиваю это, заключается в том, что яинтересно, есть ли у кого-нибудь опыт, что CURSORS будет менее эффективен, чем издержки, связанные с многократной пересылкой данных между MySQL и PHP.Другая проблема заключается в том, что он использует одну из базовых таблиц, поэтому я хотел бы свести к минимуму попадания в нее.

1 Ответ

1 голос
/ 17 сентября 2011

Вы можете создать класс-заглушку, который реализует интерфейс PHP Iterator (http://php.net/manual/en/class.iterator.php). Когда вы создаете экземпляр класса, реализуемого с помощью интерфейса Iteretor, он может хранить соединение и отслеживать место курсора. При создании новогоЭкземпляр этого объекта, вы можете запустить начальный запрос и получить курсор initail. Затем, когда вы используете foreach для объекта, он вызовет пользовательскую реализацию объекта метода next (), который вы будете кодировать для перемещенияCURSOR вперед и возвращает текущие значения, необходимые для цикла.

...