Si está utilizando php5 y mysql5, ¿existe una ventaja sustancial al usar procesos almacenados sobre declaraciones preparadas? (He leído en algún lugar que puede no obtener ganancias sustanciales de rendimiento del programa almacenado mysql5)Estado de cuenta preparado frente a procedimiento almacenado
Respuesta
No son realmente lo mismo: con los procedimientos almacenados, la lógica de la base de datos reside dentro de la base de datos. Las declaraciones preparadas básicamente evitan volver a analizar las consultas si se llaman varias veces; el beneficio de rendimiento puede variar mucho.
La elección de utilizar una u otra depende realmente de su situación específica. Realmente no uso procs almacenados ya que me gusta tener toda mi lógica en un solo lugar.
No estoy familiarizado con php, pero en general los procedimientos almacenados ya están "compilados", por lo que pueden producir un rendimiento marginalmente más rápido en una sentencia sql.
Aunque mi preferencia generalmente es seguir con el SQL desde la administración del código/implementación y la perspectiva de la prueba unitaria.
La ventaja sustancial de los procedimientos almacenados es que sus datos no cruzan una capa (en este caso sería la capa PHP/MySQL) antes de que se le pueda aplicar la lógica. Algunas consultas pueden requerir varias instrucciones de selección, que es más lenta a través de PHP que dentro de MySQL.
Ahora, como señala tobyhede, es bueno tener toda la lógica en un solo lugar. Pero he trabajado en proyectos donde no era realista consultar los datos requeridos usando PHP; tenía que hacerse a través de un procedimiento almacenado.
Puede que no sea el caso o que valga la pena mencionarlo aquí, pero los procedimientos almacenados también son "portátiles" en el caso de que sean independientes del idioma. Puede llamar a los mismos procedimientos almacenados en su base de datos desde, por ejemplo, Java como lo haría con PHP. Debido a que los procedimientos residen en la base de datos, cualquier cosa con acceso a la base de datos puede consultarlos de la misma manera.
Algunas de las ventajas de los procedimientos almacenados:
- portátil entre las lenguas
- interfaz Podría decirse simplificado y, a veces las ganancias de rendimiento para consultas complejas y en especial la consulta múltiple transacciones (prueba!)
- mediante la exposición de una interfaz en lugar de tablas , se puede utilizar para mejorar la seguridad y la integridad
Algunas desventajas de los procedimientos almacenados:
- pone la lógica de negocio en la base de datos - complica el diseño, el lugar extra para realizar un seguimiento de control de versiones y la solución de problemas
- pérdidas de rendimiento en algunos situaciones (prueba!)
- Menos portátil entre bases de datos
No creo que exista una sola respuesta generalizada para esta pregunta porque hay pros y contras dependi ng en la situación. Si sigue principios como la simplicidad, DRY, pruebas y evitar la optimización prematura, es probable que termine bien.
Comenzaré diciendo que no me gusta la idea de los procedimientos almacenados, prefiero ir a la ruta de declaraciones preparadas. En este caso particular, creo que también está comparando manzanas con naranjas ... ambas están allí para llenar funciones diferentes ...
Consideraré solo el procedimiento almacenado si la aplicación está basada en el 95% de la base de datos solo entonces lo hace tiene sentido tener algo de la lógica en el DB.
Los procedimientos almacenados hacen aplicaciones sentido de nivel profesional (IE de nivel empresarial) en la que:
- desea permitir su ingeniero base de datos para optimizar las consultas para obtener un rendimiento
- Quieres abstraen la complejidad de las consultas a la simple API
- QUIERE su lógica distribuida, porque parte de lo que sucede en la base de datos puede ser propiedad intelectual que no desea exponer a otras partes
- QUIERE que su lógica se distribuya, porque esa es la naturaleza de distribut ed, computación
- n-tier es posible que desee el ingeniero de base de datos o DBA para modificar el esquema sin modificar el código de la aplicación (procedimientos almacenados, por la prestación de API, proporcionar una capa de abstracción)
Hay otras razones .
Las declaraciones preparadas son mejores para el trabajo realizado dentro de una sesión. Pero si se toma el tiempo de crear una declaración preparada, esencialmente ha hecho todo lo necesario para crear un procedimiento almacenado. La diferencia es que el procedimiento almacenado está disponible en varias sesiones (sujeto a GRANTS en la base de datos).
Lo que no puedo entender es que si tiene la opción de proc almacenado frente a una declaración preparada, ¿por qué se molestaría con las declaraciones preparadas? La mayoría de las discusiones entre SP y PS parecen enfocarse en cuáles son las diferencias entre ellos, no en por qué usar uno frente a otro. Eso siempre parece reducirse a "depende de lo que estás tratando de hacer". Pero no he visto una descripción bien organizada de: use un proceso si necesita VS use una declaración si necesita ....
- 1. Cuenta de devolución en el procedimiento almacenado
- 2. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
- 3. Procedimiento almacenado al ejecutar otro procedimiento almacenado
- 4. Ejecutar un procedimiento almacenado dentro de un procedimiento almacenado
- 5. Procedimiento almacenado roto guardado
- 6. Transacción de procedimiento almacenado
- 7. Reutilizando un Estado Preparado varias veces
- 8. Estado preparado. ¿Puedo perder el parámetro?
- 9. Procedimiento almacenado asincrónico Llamadas
- 10. Magento: Crear procedimiento almacenado
- 11. Procedimiento almacenado, cuándo utilizar el parámetro de salida frente a la variable de retorno
- 12. Cómo guardar un procedimiento almacenado?
- 13. Procedimiento almacenado NULL Parámetro
- 14. Llamar a procedimiento almacenado de otro SQL procedimiento almacenado del servidor
- 15. Desaparición del procedimiento almacenado
- 16. Procedimiento almacenado frente a SQL incorporado en el rendimiento de SSIS
- 17. Pasar matriz a un procedimiento almacenado
- 18. hibernar y procedimiento almacenado
- 19. Llamar a un procedimiento almacenado con asp.net
- 20. procedimiento almacenado devuelve varchar
- 21. Pasar datatable a un procedimiento almacenado
- 22. Llamar a un procedimiento almacenado python
- 23. IF/ELSE Procedimiento almacenado
- 24. TSQL: llame a un procedimiento almacenado desde otro procedimiento almacenado y lea el resultado
- 25. Cómo llamar a un procedimiento almacenado (con parámetros) desde otro procedimiento almacenado sin tabla temporal
- 26. Llamar a un procedimiento almacenado en un procedimiento almacenado en MySQL
- 27. Procedimiento almacenado consulta de eliminación
- 28. Cambiar el definidor de procedimiento almacenado
- 29. estado de orden de Magento frente a estado
- 30. Obtener el estado 'bloqueado' de la cuenta en SQL Server
Exactamente. Vi esta pregunta y me rasqué la cabeza. Realmente, podría necesitar ambas: llamadas preparadas a procedimientos almacenados. Personalmente, no usar prepare es un deseo de muerte de aplicaciones. Necesita desinfectar los datos de alguna manera. – willasaywhat
Los procedimientos almacenados pueden usar declaraciones preparadas. Si usa o no procedimientos almacenados, debe usar declaraciones preparadas. – OIS