¿Existe una ganancia de rendimiento al manejar datos con procedimientos almacenados en lugar de alimentarlos en funciones después de la recuperación?

8

El título lo resume. Estoy razonablemente bien con PHP, y me siento cómodo haciendo que haga lo que necesito con valores extraídos de MySQL, sin embargo, con el interés de expandir mi conocimiento, me he estado preguntando si tal vez sería una técnica más eficiente en el largo plazo. ¿Son equivalentes (debido a que son aproximadamente la misma cantidad de procesamiento al final), o hay casos en que uno presenta una clara ventaja sobre el otro?

Kaji
fuente
3
Buena pregunta y punto de discusión de larga data ... cuánto habrá en el lado de la aplicación, cuánto se hará en el lado de la base de datos. Es posible que desee reformularlo a "RDBMS a APP-Layer", porque la pregunta se aplica a todo tipo de interacciones DB y APP.
Sebastian Roth
2
Quiero agregar a esta pregunta tan mal, pero no tengo nada interesante para agregar. Esta es una gran pregunta, y no me importaría convertirme en una
pregunta
En realidad estaba contemplando hacer esta pregunta, si hubiera sido sobre el tema aquí para los DBA. Busqué algo completamente diferente y encontré este por accidente. Entonces +1 por leer mi mente
Derek Downey

Respuestas:

6

Depende mucho de lo que esté haciendo con los registros y de cómo se vea su arquitectura de red. Por ejemplo, si el procedimiento almacenado va a reducir la cantidad total de datos transmitidos de MySQL a PHP, y tiene un vínculo relativamente lento entre la instancia de PHP y la base de datos, un SP ciertamente podría ayudarlo.

Le recomendaría que comience con algunas de las manipulaciones 'más pesadas' que realiza en sus datos en el lado de PHP, vea lo que puede escribir como SP y luego realice una evaluación comparativa.

TML
fuente
5

Un punto a favor de hacer más procesamiento en la base de datos es que la base de datos no puede optimizar lo que no ve. Como ejemplo, establecer una propiedad de una clase persistente en un valor constante para todas las instancias definitivamente funcionará mejor si se hace en la capa de la base de datos.

Un punto en contra es que las bases de datos son buenas en operaciones basadas en conjuntos, pero no tan buenas en operaciones basadas en filas. Por ejemplo, algo como convertir una hora UTC a hora local en función de una zona horaria que varía por fila puede no funcionar tan bien en la base de datos como en la capa de la aplicación.

Larry Coleman
fuente
Un excelente punto sobre el optimizador.
TML
2

Por lo general, si el resultado es una agregación, (suma, promedio, recuento) es mucho más rápido computarlo en el servidor de la base de datos, evitando la comunicación innecesaria entre el servidor y el cliente. Además, ordenar y agrupar puede beneficiarse de los índices, reduciendo la cantidad de cómputo.

Razvan Popovici
fuente