Y a-t-il un gain de performances en gérant les données avec des procédures stockées par rapport à leur alimentation en fonctions après la récupération?

8

Le titre le résume. Je suis raisonnablement bien avec PHP et je suis à l'aise de le faire faire ce dont j'ai besoin avec des valeurs tirées de MySQL, mais dans l'intérêt d'étendre mes connaissances, je me demandais si ce serait peut-être une technique plus efficace dans le long terme. Sont-ils équivalents (car ils représentent à peu près la même quantité de traitement à la fin), ou existe-t-il des cas où l'un présente un avantage distinct sur l'autre?

Kaji
la source
3
Bonne question et point de discussion de longue date .. combien sera du côté APP, combien sera fait du côté DB. Vous voudrez peut-être la reformuler en "RDBMS to APP-Layer", car la question s'applique à toutes sortes d'interactions DB et APP.
Sebastian Roth
2
Je veux ajouter à cette question si mal, mais je n'ai rien d'intéressant à ajouter. C'est une excellente question, et je ne me dérangerais pas de devenir une
FAQ
J'envisageais en fait de poser cette question, si elle aurait été sur le sujet ici pour les administrateurs de base de données. J'ai cherché quelque chose de complètement différent et j'ai trouvé celui-ci par accident. Donc +1 pour avoir lu mon esprit
Derek Downey

Réponses:

6

Cela dépend beaucoup de ce que vous faites avec les enregistrements et de l'apparence de votre architecture réseau. Par exemple, si la procédure stockée va réduire la quantité globale de données transmises de MySQL à PHP, et que vous avez un lien relativement lent entre l'instance PHP et la base de données, un SP pourrait certainement vous aider.

Je vous recommande de commencer par certaines des manipulations `` plus lourdes '' que vous faites pour vos données côté PHP, de voir ce que vous pouvez écrire en tant que SP, puis de les comparer.

TML
la source
5

Un point en faveur de plus de traitement dans la base de données est que la base de données ne peut pas optimiser ce qu'elle ne voit pas. Par exemple, la définition d'une propriété d'une classe persistante à une valeur constante pour toutes les instances fonctionnera certainement mieux si elle est effectuée dans la couche de base de données.

Un point contre est que les bases de données sont bonnes pour les opérations basées sur des ensembles, mais pas si bonnes pour les opérations basées sur des lignes. Par exemple, quelque chose comme la conversion d'une heure UTC en heure locale basée sur un fuseau horaire variant par ligne peut ne pas fonctionner aussi bien dans la base de données que dans la couche d'application.

Larry Coleman
la source
Un excellent point sur l'optimiseur.
TML
2

Habituellement, si le résultat est une agrégation, (somme, moyenne, nombre), il est beaucoup plus rapide d'être calculé dans le serveur de base de données, en évitant une communication inutile entre le serveur et le client. De plus, le classement et le regroupement peuvent bénéficier des index, ce qui réduit la quantité de calcul.

Razvan Popovici
la source