2011-01-25 14 views
23

Tengo una consulta compleja que usa muchas combinaciones (8 de hecho). Estaba pensando en simplificarlo en una vista. Después de investigar un poco puedo ver los beneficios en simplicidad y seguridad. Pero no vi ninguna mención de velocidad.¿Es una vista de MySQL más rápida que una consulta normal?

¿Las vistas funcionan como declaraciones preparadas, donde la consulta se precompila? ¿Hay alguna ganancia de rendimiento notable al usar vistas?

+2

Algunas bases de datos precompilarán la vista, pero no creo que MySQL lo haga. Es posible que desee consultar esta pregunta: http://stackoverflow.com/questions/1021319/how-to-optimize-mysql-views –

+0

Al contrario de las respuestas - En mi experiencia, para vistas con muchas combinaciones, haciendo un directo la consulta se ejecuta más rápido. –

Respuesta

13

No, una vista es simplemente una consulta de texto almacenado. Puede aplicar WHERE y ORDER en su contra, el plan de ejecución se calculará con las cláusulas que se tengan en cuenta.

+4

Esto no es estrictamente cierto. Es esencialmente correcto si elige fusionar para su algoritmo de vista, pero si elige temptable se materializará. Indefinido (el valor predeterminado, si no se especifica) permite que MySQL elija, lo que puede hacer algo que usted podría no esperar. – Ray

+0

No soy un especialista de MySQL, pero estoy bastante seguro de que el algoritmo TempTable controla cómo MySQL procesa la vista cuando se solicitan los resultados y no tiene ningún efecto sobre cómo se almacena la vista. –

+0

Sí, lo cual es bastante diferente de tener solo una parte del texto que se ejecuta como si fuera una consulta ad-hoc. – Ray

0

A veces puede ayudar, pero no es una bala de plata. He visto una vista de rendimiento de la ayuda, pero también he visto que me dolió. Una vista puede forzar la materialización, lo que a veces puede brindarle una mejor ruta de acceso si MySQL no está eligiendo una buena para usted.

+0

MySQL no admite vistas materializadas. Así que no veo cómo podría ayudar el rendimiento sobre la consulta equivalente ... – ircmaxell

+0

No lo llaman vistas materializadas, pero "temptable" es uno de los algoritmos de vista, lo que hace más o menos como el nombre implica – Ray

+1

He buscado esto y el algoritmo tentable es _definitivamente no_ una versión de vistas materializadas. Hasta la fecha, no hay soporte para vistas materializadas, o cualquier forma de vista previamente resuelta, en MySQL (a menos que proyecte manualmente una vista a una tabla de forma periódica). –

0

Una vista es básicamente una subconsulta almacenada. No hay ninguna diferencia esencial entre:

SELECT * 
FROM someview 

y

SELECT * 
FROM (
    SELECT somestuff 
    FROM underlying table 
); 

excepto la vista un poco más fáciles de transportar, ya que no tiene que escribir la consulta subyacente cada vez que desee trabajar con cualquier dato vuelve.

+1

¿Y qué pasa si MySql elige un algoritmo de vista temporal? – Ray

+2

Estoy completamente en desacuerdo. una VISTA MySQL no es solo un alias para una cadena almacenada de una consulta.Puede obtener grandes ganancias o pérdidas de rendimiento si lo usa correctamente o no. Ver mi respuesta para más detalles. – Juan

Cuestiones relacionadas