Tengo una pregunta teórica.

Yo no puedo ver ninguna diferencia entre declarar una función dentro de un archivo PHP y la creación de un procedimiento almacenado en una base de datos que hace la misma cosa.

¿Por qué iba yo a querer crear un procedimiento almacenado, por ejemplo, para devolver una lista de todas las Ciudades de un País específico, cuando yo puedo hacer eso con un PHP función para la consulta de la base de datos y va a tener el mismo resultado?

¿Cuáles son los beneficios de usar procedimientos almacenados en este caso? O cual es mejor? Para utilizar las funciones en PHP o procedimientos almacenados dentro de la base de datos? Y ¿cuáles son las diferencias entre los dos?

Gracias.

InformationsquelleAutor Lulzim | 2013-06-25

4 Comentarios

  1. 29

    Algunos de los beneficios incluyen:

    • Mantenibilidad: usted puede cambiar la lógica del procedimiento sin necesidad de editar app1 app2 y app3 llamadas.

    • De seguridad/Control de Acceso: es más fácil preocuparse acerca de quién puede llamar a un procedimiento predefinido que es para controlar quién puede acceder a qué tablas o filas de la tabla que.

    • Rendimiento: si la aplicación no se encuentra en el mismo servidor que tu DB, y lo que estás haciendo involucra varias consultas, utilizando un procedimiento reduce la sobrecarga de la red mediante la participación de una sola llamada a la base de datos, en lugar de tantas llamadas como hay consultas.

    • Rendimiento (2): un plan de consulta del procedimiento es normalmente en caché, lo que permite reutilizar una y otra vez sin necesidad de tener que volver a prepararlo.

    (En el caso de tu ejemplo en particular, los beneficios son ciertamente nulo.)

    • Un gran inconveniente de los procedimientos almacenados son los que viven dentro de la base de datos, y no dentro de un sistema de control de versiones como GIT, por lo tanto no me gusta procedimientos almacenados en una no estática de desarrollo del paisaje. Si su seguro de sus funciones no requieren cambio de los próximos 10 años.. (pero yo no trabajo para empresas)
    • No hay nada de malo con poner SPs en git. Si nada, absolutamente debe el estar allí.
    • La mayoría de los marcos de apoyo para las migraciones en estos días. No hay ninguna razón por la que no se puede definir un procedimiento almacenado en una migración, que resuelve este problema con bastante facilidad.
  2. 6

    Respuesta corta sería si desea que el código sea portable, no utilizar procedimientos almacenados, porque si se desea en algún momento el cambio de la base de datos por ejemplo de MySQL a PostgreSQL usted tendrá que actualizar/puerto de todos los procedimientos almacenados que usted ha escrito.

    Por otro lado, a veces se puede lograr un mejor rendimiento de los resultados del uso de procedimientos almacenados, porque todo lo que el código se ejecute por el motor de base de datos. Usted también puede hacer que la situación empeore si los procedimientos almacenados se utilizan incorrectamente.

    No creo que la selección de país es muy costosa operación. Así que supongo que usted no tiene que utilizar procedimientos almacenados para este caso.

  3. 3

    ok, esto puede ser un poco simplista (y posiblemente incompleta):

    Con un procedimiento almacenado:

    1. usted no necesita para transmitir la consulta a la base de datos
    2. el DBMS no necesita validar la consulta cada vez (se valida en un sentido de sintaxis, etc)
    3. el DBMS no necesita para optimizar la consulta cada vez (recuerde, SQL es declarativo, por lo tanto, el DBMS debe generar una optimización del plan de ejecución de consulta)
  4. 3

    Ya que la mayoría de los chicos ya se ha explicado, pero me gustaría probar a reiterar en mi propio camino

    Procedimientos Almacenados :

    La lógica reside en la base de datos.

    Digamos que algunos de consultas que necesitamos para ejecutar, a continuación, podemos hacer que, ya sea por :

    • El envío de la consulta a la Base de datos del servidor desde el cliente, donde se analiza, se compila y luego se ejecuta.
    • La otra forma es la presencia de la consulta en el servidor de Base de datos y crear un alias para la consulta, en la que el cliente va a utilizar para enviar la solicitud al servidor de base de datos y cuando se reciban en el servidor será ejecutado.

      Por lo tanto tenemos :

      Cliente ———————————————————-> Servidor

      Convencional :

      Consulta creada @Cliente ———- luego se propaga al Servidor ———-Consulta : se llega servidor : Analizar, Compilar , ejecutar.

      Procedimientos Almacenados :

      Alias Creado, utilizado por el Cliente—————-luego propagarse a Servidor——– Alias alcanzado en el Servidor : Analizar,Compilar, almacenar en Caché (por primera Vez)

      La próxima vez mismo alias viene, ejecutar la consulta ejecutable directamente.

      Ventajas :

    • Reducir el Tráfico de Red : Si el cliente está enviando un grande de la consulta, y puede estar usando la misma consulta con mucha frecuencia, a continuación, cada uno de los bits de la consulta se envía a la red y, por tanto, lo que puede aumentar el tráfico de la red y el aumento innecesario el uso de la red.

    • Más rápido de Ejecución de la Consulta : Desde procedimientos almacenados se Analiza, Compilado a la vez, y el ejecutable se almacena en la Base de datos. Por lo tanto si misma consulta se
      se repite varias veces, a continuación, la Base de datos directamente ejecuta el archivo ejecutable y por lo tanto se ahorra Tiempo en Analizar,Compilar, etc. Esto es bueno si la consulta se utiliza con frecuencia.
      Si la consulta no es utilizada con frecuencia, entonces no puede ser bueno, porque el almacenamiento en caché ejecutable ocupa espacio, ¿por qué poner la Carga en la Base de datos innecesariamente.

    • Modular : Si varias aplicaciones quiere usar la misma consulta, con la forma tradicional que está duplicando código innecesariamente en las aplicaciones, la mejor
      manera es poner el código de cerca de la Base de datos, de esta forma la duplicación puede ser aliviado con facilidad.

    • De seguridad: procedimientos Almacenados también se desarrollan, teniendo en cuenta acerca de la Autorización(es decir, que tiene el privilegio de ejecutar la consulta y que no es).Así que para un usuario específico puede conceder permisos a otros como el DBA puede revocar el permiso. Así que es una buena manera como un punto wrt a los Administradores de bases de datos bases de datos se puede saber quiénes son las personas adecuadas para conseguir el acceso.Pero tales cosas no son tan populares ahora, usted puede diseñar su Aplicación de Base de datos de tal manera que sólo la persona autorizada puede tener acceso a él y no a todos.
      Así que si usted sólo tiene la Seguridad/de la Autorización como el punto de utilizar Procedimientos Almacenados en lugar de la forma Convencional de hacer las cosas, entonces el procedimiento Almacenado puede no ser apropiada.

Dejar respuesta

Please enter your comment!
Please enter your name here