Las vistas en SQL Server

21/11/2011

Una de las mejores herramientas que tenemos para mejorar el rendimiento de las consultas en las bases de datos son las vistas. Imagimenos por ejemplo, que tenemos una consulta para obtener un listado de registros y que ese listado se obtiene haciendo una query con 5 joins. La definición de dicha query la guardamos en la vista. Podemos pensar que a nivel de rendimiento, es lo mismo ejecutar la query con las 5 joins que ejecutar la vista que ejecuta la query, pero ahí es donde las vistas nos dan gran ventaja utilizando índices.

Sobre el resultado de una vista, podemos añadir un índice, aumentando de forma considerable la ejecución de dicha query. De esa forma, cuando busquemos un registro en la query anterior de 5 joins, la búsqueda será instantánea, ya que estaremos utilizando un índices sobre esas 5 joins. Si hacemos eso sin la vista, necesitamos hacer primero un join de 5 tablas y luego un filtro con un where. Entendemos ahora la gran velocidad que podemos obtener con los índices en las vistas. La única pega, es que evidentemente los updates penalizan los índices, osea que tenemos que ver si realmente las tablas de esos 5 joins, se actualizan muchas veces u ocasionalmente, y ahí es donde el dba y los desarrolladores tienen que encontrar dicho equilibrio.

Para acabar el artículo, comentar también 2 propiedades de las vistas que nos pueden ayudar significativamente:

schemabinding: Esta propiedad nos permite configurar la vista de tal forma que evite modificar el diseño de la tabla sin quitar antes esta propiedad. Si habilitamos esta propiedad, evitamos tener vistas huérfanas y que son tan molestas para el usuario (vistas que porque falta una columna, una tabla… no funcionan), osea si queremos modificar la estructura de la tabla, es necesario deshabilitar previamente el schemabinding asociado a la vista.

with check option: Esta propiedad evita que podamos hacer updates distintos a los que tenemos en la definición de la vista. Por ejemplo si la definición de la vista tenemos un filtro con un where id=150, entonces los updates sólo pueden ser id=150.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: