O título resume tudo. Estou razoavelmente familiarizado com o PHP e confortável em fazê-lo com os valores extraídos do MySQL, no entanto, no interesse de expandir meu conhecimento, tenho me perguntado se talvez fosse uma técnica mais eficiente no longo prazo. Eles são equivalentes (por serem aproximadamente a mesma quantidade de processamento no final) ou existem casos em que um apresenta uma vantagem distinta sobre o outro?
8
Respostas:
Depende muito do que você está fazendo com os registros e da aparência da sua arquitetura de rede. Por exemplo, se o procedimento armazenado reduzir a quantidade geral de dados transmitidos do MySQL para PHP e você tiver um link relativamente lento entre a instância do PHP e o banco de dados, um SP certamente poderá ajudá-lo.
Eu recomendo que você comece com algumas das manipulações 'mais pesadas' que você faz com seus dados no lado do PHP, veja o que você pode escrever como um SP e depois faça o benchmark.
fonte
Um ponto a favor de fazer mais processamento no banco de dados é que o banco de dados não pode otimizar o que não vê. Como exemplo, definir uma propriedade de uma classe persistente como um valor constante para todas as instâncias definitivamente terá um desempenho melhor se for feito na camada de banco de dados.
Um ponto contra é que os bancos de dados são bons em operações baseadas em conjuntos, mas não tão bons em operações baseadas em linhas. Por exemplo, algo como converter um horário UTC para horário local com base em um fuso horário variando por linha pode não ter um desempenho tão bom no banco de dados quanto na camada de aplicativos.
fonte
Geralmente, se o resultado é uma agregação (soma, média, contagem), é muito mais rápido ser calculado no servidor de banco de dados, evitando a comunicação desnecessária entre o servidor e o cliente. Além disso, a ordenação e o agrupamento podem se beneficiar dos índices, reduzindo a quantidade de computação.
fonte