vistas utilizarlos soporta segundo rendimiento procedimientos procedimiento por optimizar llamar lentas lenta desde cuantas consultas almacenados almacenado mysql performance database-design stored-procedures views

utilizarlos - view lenta mysql



MySQL: vistas frente a procedimientos almacenados (4)

En mi opinión, los procedimientos almacenados deben usarse únicamente para la manipulación de datos cuando la misma rutina se debe usar entre varias aplicaciones diferentes o para ETL entre bases de datos o tablas, nada más. Básicamente, haga tanto código como pueda hasta que se encuentre con el principio DRY o lo que está haciendo es simplemente mover datos de un lugar a otro dentro del DB.

Las vistas se pueden usar para proporcionar una "vista" alternativa o simplificada en los datos. Como tal, iría con una vista ya que no estás realmente manipulando los datos tanto como encontrar un método diferente para mostrarlos.

Desde que MySQL comenzó a soportar procedimientos almacenados, nunca los he usado realmente. En parte porque no soy un gran escritor de consultas, en parte porque a menudo trabajo con los DBA que hacen esas elecciones por mí, en parte porque estoy cómodo con Lo que sé.

En términos de selección de datos, específicamente cuando se considera una selección que es esencialmente una selección de datos de des-normalización (uniones) y agregadas (promedio o máximo, subconsultas con recuentos, etc.), ¿cuál es la elección correcta en MySQL 5.x? ? ¿Una vista? O un procedimiento almacenado?

Vistas con las que me siento cómodo: ya sabe cómo se supone que debe ser su consulta SELECT, así que solo cree eso, asegúrese de que esté indexado y lo que no, solo haga una CREATE VIEW [View] AS SELECT [...] . Luego, en mi aplicación, trato la vista como una tabla de solo lectura, representa una versión desnormalizada de mis datos normalizados.

¿Cuáles son las desventajas aquí, si hay alguna? ¿Y qué cambiaría (ganancias o pérdidas) si moviera esa misma instrucción SELECT exacta a un procedimiento almacenado?

Espero encontrar una buena información "oculta" que haya sido difícil de encontrar mientras busco este tema en Google, pero realmente doy la bienvenida a todos los comentarios y respuestas.


No estoy seguro de si es una elección de ambos. Los procedimientos almacenados pueden hacer una amplia variedad de cosas que las vistas tendrían dificultades (piense en poblar datos en tablas temporales, luego ejecutar el cursor sobre ellos y luego hacer la agregación y devolver un conjunto de resultados).

Las vistas, por otro lado, pueden ocultar derechos de acceso / sql complejos y presentar una vista modificada del esquema.

Creo que ambos tienen un lugar en el esquema de las cosas y ambos son útiles para una implementación exitosa del esquema.


Una cosa a tener en cuenta, al menos con los resultados de la vista de MySQL, se almacena en una tabla temporal y, a diferencia de la mayoría de los motores de base de datos decentes, esta tabla no está indexada, así que si la utilizas para simplificar consultas, las vistas son geniales cuando tu programa captará todas las resultados de la vista; sin embargo, si luego busca los resultados de esa vista, según los parámetros, es increíblemente lenta, especialmente si hay millones de registros que examinar y, lo que es peor, si la vista se construye sobre otras vistas, etc.

Un procedimiento almacenado, sin embargo, puede pasar esos parámetros de búsqueda y ejecutar la consulta directamente en las tablas subrayadas (indexadas). La desventaja es que los resultados deberán buscarse cada vez que se ejecute el procedimiento, lo que también puede ocurrir con una vista de todos modos, dependiendo de la configuración del servidor.

así que, básicamente, si utiliza una vista, intente minimizar la cantidad de resultados (si luego necesita buscarla), de lo contrario, utilice un procedimiento almacenado.


Utilizo vistas para desnormalización o formato de salida y procedimientos almacenados para filtrado y manipulación de datos (cosas que requieren entradas de parámetros) o iteración (cursores).

A menudo accedo a una vista dentro de un procedimiento almacenado cuando se requieren tanto la des-normalización como el filtrado.