Сохраненные процедуры не проходят в мире php / mysql?

Я цитирую часть ответа, который я получил по другому вопросу :

В мире PHP / MySQL я бы сказал, что хранимые процедуры не идут

Я хотел бы знать: это так? Зачем? Почему нет?

[edit] Я имею в виду это как общий вопрос без особой необходимости [/ edit]

Я разрабатываю и поддерживаю большое приложение PHP / MySQL. Вот мой опыт работы с хранимыми процедурами.

Со временем наше приложение стало очень сложным. И со всей логикой на стороне php некоторые операции будут запрашивать базу данных с более чем 100 короткими запросами.

MySQL настолько быстр, что производительность по-прежнему приемлема, но не велика.

Мы приняли решение в нашей последней версии программного обеспечения переместить часть логики на хранимые процедуры для сложных операций.

Мы достигли значительного прироста производительности из-за того, что нам не приходилось отправлять данные назад и вперед между PHP и MySQL.

Я согласен с другими плакатами здесь, что PL / SQL не является современным языком и его трудно отлаживать.

Bottom Line: Хранимые процедуры – отличный инструмент для определенных ситуаций. Но я бы не рекомендовал их использовать, если у вас нет веских оснований. Для простых приложений хранимые процедуры не стоят проблем.

При использовании хранимых процедур с MySQL вам часто придется использовать интерфейс mysqli в PHP, а не обычный интерфейс mysql .

Причина этого связана с тем, что хранимые процедуры часто возвращают более 1 набора результатов. Если это так, API mysql не сможет справиться с этим, и вы получите ошибки.

Интерфейс mysqli имеет функции обработки этих нескольких наборов результатов, таких как mysqli_more_results и mysqli_next_result .

Имейте в виду, что если вы возвращаете какой-либо результирующий набор вообще из хранимой процедуры, вам необходимо использовать эти API, поскольку хранимая процедура генерирует 1 результирующий набор для фактического выполнения, а затем 1 дополнительный для каждого набора результатов, намеренно возвращенного из хранимую процедуру.

У вас есть конкретная необходимость, которая заставляет вас их рассматривать? Хранимые процедуры гораздо менее переносимы, чем «простые» SQL, поэтому люди обычно не хотят их использовать. Кроме того, написав справедливую долю PL / SQL, я должен сказать, что процедурный способ написания кода добавляет сложности, и он просто не очень современный или проверяемый. Они могут быть полезны в некоторых особых случаях, когда вам нужно оптимизировать, но я бы, конечно, подумал дважды. У Джеффа сходные мнения .

Обычно я избегаю хранимых процедур, потому что он добавляет нагрузку в базу данных, которая составляет 99% времени, что является самым большим узким местом. Добавление нового php-сервера ничто по сравнению с репликацией вашего db-файла MySQL.

Это субъективный вопрос.

Я бы лично включил все вычисления в PHP и действительно использовал MySQL в качестве таблицы.

Но, если вы чувствуете, что проще использовать хранимые процедуры, то непременно сделайте это.

Я бы не сказал, что «хранимые процедуры – это не-go», я бы сказал: «Не используйте их без уважительной причины».

Хранимые процедуры MySQL имеют особенно ужасный синтаксис (Oracle и MSSQL тоже довольно ужасны), поддерживая их, просто усложняет ваше приложение.

Используйте хранимую процедуру, если у вас есть реальная (измеримая) причина для этого, иначе нет. Это мое мнение.

Вероятно, существует фобия хранимых процедур с mysql, отчасти из-за того, что они не являются чрезвычайно мощными (по сравнению с Postgresql и даже MSSQL, хранимые процедуры mysqls значительно отсутствуют).

О плюсе: они упрощают общение с ним с нескольких языков.

Если кто-то заявляет, что « использование хранимых процедур является плохим, потому что оно не переносится в разные базы данных », то это, конечно, означает, что они думают, что вы, вероятно, переключите базы данных, а это означает, что они, в свою очередь, говорят, что считают, что вы не должны использовать mysql.

Популярно использовать ORM в эти дни, но я лично считаю, что ORM – это BadThing ( вопрос: 82882 )

Я думаю, что использование хранимых процедур может предложить некоторую абстракцию в некоторых приложениях, как и в любом месте, где вы бы использовали один и тот же кусок кода SQL для обновления или добавления тех же данных, тогда вы могли бы создать один sproc save_user ($ attr ….. ), скорее, повторяя себя повсюду.

Согласованный синтаксис волосатый, и если вы привыкли к MSSQL и spaccs oracle, есть различия, которые могут разразиться.

Вы также должны знать, что хранимые процедуры не поддерживались в Mysql до версии 5.0. http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html Также хранимые процедуры, как правило, были немного странными в этой реализации. Теперь, когда Mysql 5.1 начинает появляться в дикой природе, я вижу больше использования хранимых процедур с Mysql.

Я делаю ограниченное использование хранимых процедур, и он работает хорошо. Я ведущий разработчик для одного из моих клиентов, работающих на своем сайте электронной почты. Клиент имеет систему запаса, мы реализовали набор хранимых процедур в своей системе и создали API для связи с ним. Это позволило нам абстрагировать свою базу данных, и они могли реализовать логику в хранимых процедурах. Простой, но удовлетворен бизнес-требованиям очень хорошо.