2010-01-13 22 views
21

He aprendido que las vistas se pueden usar para crear "vistas de tabla" personalizadas (por así decirlo) que agregan datos relacionados de varias tablas.Ventaja de usar Views en MySQL

Mi pregunta es: ¿cuáles son las ventajas de las vistas? En concreto, vamos a decir que tengo dos tablas:

event | eid, typeid, name 
eventtype | typeid, max_team_members 

Ahora crear una vista:

eventdetails | event.eid, event.name, eventtype.max_team_members 
      | where event.typeid=eventtype.typeid 

Ahora si quiero número máximo de miembros que puede contener un equipo para algunos event, pude:

  • uso de la vista
  • hacer una consulta de unión (o tal vez un procedimiento almacenado).

¿Cuáles serían mis ventajas/desventajas en cada método?

Otra consulta: si los datos en los eventos de tabla y tipo de evento se actualizan, ¿hay alguna sobrecarga relacionada con la actualización de los datos en la vista (teniendo en cuenta que almacena en caché los datos resultantes)?

Respuesta

17

Una vista no se almacena por separado: cuando consulta una vista, la vista se reemplaza con la definición de esa vista. Entonces, los cambios en los datos en las tablas aparecerán inmediatamente a través de la vista.

Además de la función de seguridad ha señalado anteriormente:

Si estás escribiendo un gran número de consultas que se realizarían que se unen, se Factores que el código SQL. Como hacer algunas operaciones en una función utilizada en varios lugares, puede hacer que su código sea más fácil de leer/escribir/depurar.

También le permitiría cambiar cómo se realiza la unión en el futuro en un solo lugar. Tal vez una relación de uno a muchos podría convertirse en una relación de muchos a muchos, introduciendo una mesa extra en la unión. O puede decidir desnormalizar e incluir todos los campos de tipo de evento en cada registro de evento para que no tenga que unirse cada vez (espacio de negociación para el tiempo de ejecución de la consulta).

Puede dividir las tablas aún más tarde, cambiándolas a una combinación de 3 vías, y otras consultas que utilicen la vista no tendrían que reescribirse.

Puede agregar nuevas columnas a la (s) tabla (s) y cambiar la vista para omitir las nuevas columnas de modo que algunas consultas anteriores que usan "seleccionar *" no se rompan al cambiar las definiciones de la tabla.

+0

"Una vista no se almacena por separado" - ¿entonces mysql no realiza el almacenamiento en caché de los contenidos de una vista? – jrharshath

+2

Algunos otros motores de base de datos admiten "vistas materializadas" donde los resultados de la selección de la vista se almacenan en caché, pero MySQL no. Vea el comentario sobre vistas materializadas aquí: http://dev.mysql.com/doc/refman/5.5/en/create-view.html –

+2

MySQL tiene un caché de consultas, por lo que si su consulta es exactamente la misma (por ejemplo, "select * from myview;"), es posible que obtenga resultados almacenados en caché. – Ken

13

Puede restringir a los usuarios a la vista en lugar de las tablas subyacentes, mejorando así la seguridad.