sql >> Base de Datos >  >> RDS >> Mysql

¿Puede MySql anidado SP ser un cuello de botella?

Si es posible. No tenemos medidas de cuánto tiempo lleva esto, pero uno puede esperar que una tabla temporal cause cierta sobrecarga a medida que la crea, escribe datos en ella, la consulta y luego la suelta. ¿Con qué frecuencia se llama esto?

Además, se sabe que los procedimientos almacenados de MySQL son bastante ineficientes. No conservan la forma compilada del procedimiento, como ocurre en Oracle y otras marcas de RDBMS. En otras palabras, cada sesión vuelve a compilar cada procedimiento que utiliza la primera vez que se llama.

Primero, sugeriría eliminar la tabla temporal. Simplemente diseñe el procedimiento anidado para generar la consulta SQL correcta como una cadena y devuelva esa cadena. Luego, el procedimiento externo ejecuta la consulta y es su resultado. Debería poder omitir la creación/eliminación de la tabla temporal y la inserción en la tabla temporal.

En segundo lugar, si estuviera diseñando esta aplicación, no veo la necesidad de ninguno de los dos procedimientos almacenados. Recomendaría escribir código para crear la consulta SQL correcta en su aplicación y luego simplemente ejecutar esa consulta desde la aplicación.