В системах SQL, которые поддерживают хранимые процедуры, если вы не используете определенные функции, sproc часто будет храниться на сервере в скомпилированной и оптимизированной форме. Когда текст SQL встраивается / строится как строка в PHP или другой веб-странице, текст должен быть отправлен в БД и скомпилирован перед выполнением. Это не только менее эффективно в базе данных, но и заставляет интерпретатор PHP (или что-то еще) выполнять большую работу перед отправкой, а веб-сервер - работать для извлечения большей страницы. Поэтому мне интересно, почему я никогда не видел хранимых процедур, используемых в каком-либо из нескольких крупных веб-приложений с открытым исходным кодом, на которые я смотрел, даже тех, которые поддерживают ТОЛЬКО mySQL или MS SQL Server (оба из которых имеют хранимые процедуры).
2 ответа
Хранимые процедуры привязывают вас к конкретной платформе БД. Например, код, написанный для MySQL, не будет сразу запускаться на SQL Server. Это делает ваше приложение менее переносимым. Конечно, есть и другая история: для достижения переносимости также потребуется использовать только стандартные типы данных и не полагаться на функции, специфичные для платформы. Что на практике не всегда так.
Если приложения поддерживают несколько БД, вполне возможно, что они будут писать процедуры хранения для каждой БД, которую они поддерживают.
Я не знаю, что такое SQL Server, но что касается MySQL, многие общие хостинги вообще не позволяют создавать хранимые процедуры и некоторые другие функции.