2011-02-03 131 views
19

Estoy buscando crear una vista de una tabla que resalte los datos que cumplan con un criterio específico. Por ejemplo, si tengo una tabla con valores enteros, quiero que mi vista muestre las filas que tienen un valor mayor que 100. Sé cómo lograr esto al crear una vista en una tabla, sin embargo, ¿la vista es dinámica? He probado esto en MySQL y parece ser cierto. Pero si mi mesa tiene más de 1000 filas, ¿es esto eficiente? ¿La vista aún se actualizará "dinámicamente" a cualquier cambio en la tabla original?¿Las vistas de MySql son dinámicas y eficientes?

+0

Ver http://stackoverflow.com/q/7922675/632951 – Pacerier

Respuesta

23

Básicamente, hay básicamente 2 types of views en MySQL.

  1. Combinar Vistas

    Este tipo de vista, básicamente, sólo vuelve a escribir sus consultas con SQL de la vista. Por lo tanto, es una forma abreviada de escribir las consultas usted mismo. Esto no ofrece ningún beneficio de rendimiento real, pero facilita la escritura de consultas complejas y facilita el mantenimiento (ya que si la definición de la vista cambia, no es necesario cambiar 100 consultas frente a la vista, solo la definición).

  2. Vistas TempTable

    Este tipo de vista crea una tabla temporal con la consulta de SQL de la vista. Tiene todos los beneficios de la vista de fusión, pero también reduce el tiempo de bloqueo en las tablas de la vista. Por lo tanto, en servidores altamente cargados podría tener una ganancia de rendimiento bastante significativa.

También está el "Indefinido" tipo de vista (por defecto), que vamos a MySQL recoger lo que piensa que es el mejor tipo en tiempo de consulta ...

Pero tenga en cuenta algo importante tener en cuenta, es que MySQL no tiene soporte para materialized views. Por lo tanto, no es como Oracle, donde una vista compleja aumentará significativamente el rendimiento de las consultas en su contra. Las consultas de las vistas siempre se ejecutan en MySQL.

En cuanto a la eficiencia, las vistas en MySQL no aumentan ni disminuyen la eficiencia. Están ahí para hacerte la vida más fácil al escribir y mantener consultas. He usado vistas en tablas con cientos de millones de filas, y han funcionado bien ...

+0

bien, eso tiene sentido. Gracias ircmaxell! – Santiago

+1

utilizando vistas Afecta el rendimiento, ya que MySQL no responde bien a las consultas anidadas, solo tiene capacidades muy limitadas para empujar predicados. OTOH Puede hacer un muy buen trabajo optimizando una consulta sin anidamiento SELECT. – symcbean

+0

@symcbean: ¿Tiene alguna referencia para respaldar ese reclamo? Tengo curiosidad por verlo (legítimamente) ... – ircmaxell

9

mysql no usa índices en tablas temporales ... por lo que puede afectar gravemente su rendimiento.

Cuestiones relacionadas