Pergunta

Eu estou citando parte de uma resposta que recebi para outra pergunta minha :

No mundo PHP / MySQL eu diria procedimentos armazenados são no-go

Eu gostaria de saber: É mesmo? Por quê? Por que não?

[editar] eu quero dizer isso como uma questão geral, sem uma necessidade específica em mente [/ edit]

Foi útil?

Solução

Eu desenvolver e manter uma grande aplicação PHP / MySQL. Aqui é a minha experiência com procedimentos armazenados.

Ao longo do tempo a nossa aplicação tem crescido muito complexo. E com toda a lógica no lado do php, algumas operações iria consultar o banco de dados com mais de 100 consultas curtas.

MySQL é tão rápida que o desempenho ainda era aceitável, mas não ótimo.

Nós tomamos a decisão em nossa versão mais recente do software para mover um pouco da lógica para procedimentos armazenados para operações complexas.

Nós fizemos alcançar um ganho significativo de performance devido ao fato de que nós não têm de enviar dados e para trás entre PHP e MySQL.

Eu concordo com os outros cartazes aqui que PL / SQL não é uma linguagem moderna e é difícil de depuração.

Bottom Line: Procedimentos armazenados são uma ótima ferramenta para determinadas situações. Mas eu não recomendo usá-los a menos que você tenha uma boa razão. Para aplicações simples, procedimentos armazenados não são vale a pena.

Outras dicas

Ao usar procedimentos armazenados com MySQL, muitas vezes você vai precisar usar a mysqli de interface em PHP e não regular mysql interface.

A razão para isto é devido ao fato de que os procedimentos armazenados, muitas vezes, retornar mais de 1 conjunto de resultados. Se isso acontecer, a API mysql não pode lidar com isso, e você obterá erros.

A interface mysqli tem funções para lidar com esses vários conjuntos de resultados, funções como mysqli_more_results e mysqli_next_result .

Tenha em mente que se você devolver qualquer conjunto de resultados em tudo a partir do procedimento armazenado, então você precisa usar essas APIs, como o procedimento armazenado gera um conjunto de resultados para a execução real, e, em seguida, 1 um adicional para cada conjunto de resultados intencionalmente retornado do procedimento armazenado.

Eu geralmente ficar longe de procedimentos armazenados, porque acrescenta carga ao banco de dados que é 99% do tempo, o maior gargalo. Adicionar um novo servidor php é nada comparado ao fazer seu MySQL db replicar.

Do que você tem uma necessidade específica em mente que faz você considerá-los? Os procedimentos armazenados são muito menos portátil do que SQL "plain", que normalmente é porque as pessoas não querem usá-los. Além disso, tendo escrito uma parte equitativa do PL / SQL, devo dizer que a forma processual de escrever código adiciona complexidade e é apenas não muito moderno ou testável. Eles pode ser útil em alguns casos especiais, onde você precisa para otimizar, mas eu certamente pensar duas vezes. Jeff tem opiniões semelhantes .

Esta é uma questão subjetiva.

Eu, pessoalmente, iria incluir todos os cálculos dentro PHP e única realmente usar MySQL como uma tabela.

Mas, se você sentir que é mais fácil de usar procedimentos armazenados, em seguida, por todos os meios, vá em frente e fazê-lo.

Eu não diria "procedimentos armazenados são um não-go", eu diria "Não usá-los sem uma boa razão".

procedimentos MySQL armazenados tem uma sintaxe particularmente horrível (Oracle e MSSQL são surgiu em torno também), mantendo-os apenas complica a sua aplicação.

Do usar um procedimento armazenado, se você tem um motivo real (mensurável) para fazê-lo, caso contrário, não. Essa é minha opinião de qualquer maneira.

Há possivelmente uma fobia de procedimentos armazenados com mysql, em parte devido a não ser esmagadoramente poderosa (em comparação com o PostgreSQL e até mesmo MSSQL, mysqls procedimentos armazenados estão faltando muito).

No plus: Eles fazem interface com ele a partir de mais de uma língua mais fácil.

Se os estados alguém que " usando procedimentos armazenados é ruim porque não é portátil para diferentes bancos de dados " então este de meios do curso eles acham que você é provável que os bancos de dados de comutação, o que significa que, por sua vez dizendo que eles acho que você não deveria estar usando mysql.

É popular para usar ORM de nos dias de hoje, mas eu pessoalmente acho que ORM é um BadThing ( Pergunta : 82.882 )

Eu acho que o uso de procedimentos armazenados pode oferecer alguma abstração em determinadas aplicações, como em qualquer lugar que você usaria o mesmo pedaço de código SQL para atualizar ou adicionar os mesmos dados, você pode então criar o save_user sproc ($ attr .. ...) em vez que repetir-se por todo o lugar.

Acordado a sintaxe é peludo e se o seu usado para MSSQL e Oracle sprocs existem diferenças que podem fustrate.

Você também deve estar ciente de que procedimentos armazenados não foram apoiadas no MySQL antes da versão 5.0. http://dev.mysql.com/doc/refman/ 5.0 / en / armazenados-routines.html procedimentos também armazenados tendiam a ser ser um pouco estranho em que a implementação. Agora que o MySQL 5.1 está começando a surgir na natureza eu vejo mais o uso de procedimentos armazenados com o MySQL.

Eu faço uso limitado de procedimentos armazenados, e funciona bem. Eu sou o dev chumbo para uma de minhas empresas clientes, trabalhando em seu site e-comm. O cliente tem um sistema de estoque, implementamos um conjunto de procedimentos armazenados em seu sistema e construiu uma API para comunicar com ele. Isto permitiu-nos abstrair seu banco de dados e eles poderiam implementar a lógica nos procedimentos armazenados. Simples, mas atendeu ao requisito de negócios muito bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top