Si va por el camino del uso de vistas, ¿cómo puede garantizar un buen rendimiento?MySql views performance
¿O es mejor no usar las vistas en primer lugar e incorporar el equivalente en las declaraciones seleccionadas?
Si va por el camino del uso de vistas, ¿cómo puede garantizar un buen rendimiento?MySql views performance
¿O es mejor no usar las vistas en primer lugar e incorporar el equivalente en las declaraciones seleccionadas?
Totalmente depende de lo que está viendo a través de la vista. Pero lo más probable es que reduzcas tu esfuerzo y obtengas un mayor rendimiento. Cuando la declaración de SQL hace referencia a una vista no indexada, el analizador y el optimizador de consultas analizan el origen de la declaración de SQL y de la vista y luego los resuelven en un solo plan de ejecución. No hay un plan para la declaración SQL y un plan separado para la vista.
Una vista no compilada. Es una tabla virtual compuesta de otras tablas. Cuando lo creas, no reside en algún lugar de tu servidor. Las consultas subyacentes que componen la vista están sujetas a las mismas mejoras de rendimiento o dings del optimizador de consultas. Nunca he probado el rendimiento en una vista VS su consulta subyacente, pero me imagino que el rendimiento puede variar ligeramente. Puede obtener un mejor rendimiento en una vista indizada si los datos son relativamente estáticos. Esto puede ser lo que estás pensando, tal vez en términos de "compilado".
que mencionas vistas indizadas y tiene varios enlaces para indexados y vistas materializadas artículos. Esto está bien y bien. Pero, ¿tiene MySQL vistas indexadas? –
Actualmente, MySQL no admite vistas indizadas. –
Buena respuesta. Simplemente agregaré que una vista es básicamente una consulta con nombre en MySQL. Si se asegura de que la consulta que genera la vista tiene un buen rendimiento cuando se ejecuta por sí mismo, la vista debería funcionar de manera similar. –
Creo que el blog de Peter Zaitsev tiene la mayoría de los detalles. Hablando desde la experiencia personal, las vistas pueden funcionar bien si generalmente las mantienes simples. En uno de mis clientes, mantuvieron capas de una vista encima de otra y terminaron en una pesadilla de rendimiento.
Generalmente uso vistas para mostrar un aspecto diferente de una tabla. Por ejemplo, en la tabla de mis empleados, muéstreme a los gerentes u oculte el campo de salario de los empleados que no son de recursos humanos. Además, siempre asegúrese de ejecutar EXPLAIN en la consulta y ver para comprender exactamente qué está sucediendo dentro de MySQL.
Si desea una prueba sólida en su escenario, le sugiero que la pruebe. Es realmente difícil decir que el uso de vistas siempre es un factor determinante del rendimiento, y una vez más, una visión mal escrita probablemente va a matar tu rendimiento.
Si estamos discutiendo "si usa vistas, cómo garantizar el rendimiento", y no el efecto de rendimiento de las vistas en general, creo que se reduce a la contención (como en usted).
Puede obtener un gran problema si solo escribe las vistas para hacer que su consulta sea simple en todos los casos, pero no se preocupe de que sus vistas sean realmente útiles para el rendimiento. Cualquier consulta que hagas al final debería funcionar de manera sensata (mira el ejemplo de comentario de ese enlace por @eggyal). Por supuesto que es una tautología, pero por lo tanto no es menos valiosa
Especialmente debe tener cuidado de no hacer vistas desde las vistas, simplemente porque eso podría hacer que sea más fácil hacer esa vista.
Al final, debe ver el motivo por el que utiliza las vistas. Cada vez que hagas esto para hacer la vida más fácil al final de la programación, será mejor que tengas un procedimiento almacenado en mi humilde opinión.
Para mantener las cosas bajo control es posible que desee escribir por qué tiene una determinada vista y decidir por qué la está utilizando. Por cada 'nuevo' uso dentro de su programación, vuelva a verificar si realmente necesita la vista, por qué la necesita y si esto aún le daría una ruta de ejecución sensata. Sigue comprobando tus usos para mantenerlo rápido, y sigue comprobando si realmente necesitas esa vista.
Aquí hay un resumen de tl; dr, puede encontrar evaluaciones detalladas de Peter Zaitsev y de otros lugares.
Las vistas en MySQL generalmente son una mala idea. En Grooveshark los consideramos dañinos y siempre los evitamos. Si tiene cuidado, puede hacer que funcionen pero, en el mejor de los casos, son una forma de recordar cómo seleccionar datos o evitar que tenga que volver a escribir uniones complicadas. En el peor de los casos, pueden causar ineficiencias masivas, ocultar la complejidad, provocar subsecciones anidadas accidentales (que requieren tablas temporales y provocar agolpamiento del disco), etc.
Lo mejor es evitarlas y mantener sus consultas en el código.
Me gustaría que se han visto este comentario antes de que mi equipo y yo poner todos esos puntos de vista con una gran cantidad de combinaciones en nuestra base de datos de producción:/ – Ralph
Sirven para su propósito, pero las complejidades e ineficiencias ocultas generalmente superan un enfoque más directo. Una vez encontré una declaración de SQL que se unía en dos vistas y las ordenaba los resultados. Las vistas también se clasificaban, por lo que el tiempo de ejecución se podía medir en lo que parecían horas.
Una cosa no ha mencionado hasta ahora, pero haciendo una gran diferencia es la indexación adecuada de los puntos de vista de fuente tablas.
Como se mencionó anteriormente, puntos de vista no residen en su base de datos, pero sereconstruir cada vez que. Por lo tanto, todo lo que facilita la reconstrucción del DB aumenta el rendimiento de la vista.
A menudo, las vistas unen los datos de una manera muy mala para el almacenamiento (sin forma normal) pero muy buenos para su uso posterior (análisis, presentación de datos al usuario, ...) y unir y agregar datos de diferentes mesas.
Independientemente de si las columnas en las que se realizan las operaciones están indizadas o no, la diferencia en el rendimiento de una vista es enorme. Si las tablas y sus columnas relevantes están indexadas, el acceso a la vista no termina al volver a calcular los índices una y otra vez primero.(En el lado negativo, esto se hace cuando los datos se manipula en las tablas de origen)
! ¡Indexe todas las columnas utilizadas en las cláusulas JOINS y GROUP BY en su declaración CREATE VIEW!
He encontrado [este artículo del blog] (http://www.mysqlperformanceblog.com/2007/08/12/mysql-view-as-performance-troublemaker/) por Peter Zaitsev bastante informativo en el pasado. – eggyal
@eggyal - Gracias, tendrá una lectura y un pensar –
Comprobar también la reciente ** [MariaDB 5.3] (http://kb.askmonty.org/en/what-is-mariadb-53) ** (y 5.5) lanzamientos que tienen varias mejoras en el optimizador, incluidas las Vistas. –