Índices en vistas SQL Server

Índices en Vistas SQL Server

Las vistas permiten guardar una consulta en un objeto en la base de datos para poder acceder a ella a manera de consultas mas rápidamente. Las vistas al crearse guardan el resultado en una estructura no indizada lo que posiblemente al consultar estas el resultado no sea óptimo.

Después de crear vistar (Ver Vistas) es recomendable crear en esta un índice agrupado como su clave primaria y los índices no agrupados necesarios para realizar las consultas en la vista de manera mas óptima.

Para crear índices en la vista se utiliza la instrucción Create Index de igual forma que se utilizan en la creación de índices en tablas. (Ver Índices)
La vista tiene que estar ligada a un esquema, por lo que al crear la vista debemos incluir la cláusula With SchemaBinding. Note que la crear la vista, si la tabla está en el esquema dbo, debe incluirse el nombre del esquema. Al crear un índice agrupado debe ser único.

Usando la base de datos Northwind
use Northwind
go

En cada ejercicio se va a crear la vista y luego crear índices para esta.

Ejercicio 1

Crear una vista para los productos
Create view vistaProductosListaPrecio
With SchemaBinding
As
select
P.ProductID As ‘Código’,
P.ProductName As ‘Descripción’,
P.UnitPrice As ‘Precio’,
P.UnitsInStock As ‘Stock’
from dbo.Products As P
go

Ver la estructura de la vista, puede notarse que no existen índices para esta, lo que hara que las consultas en la vista sean lentas.
sp_help vistaProductosListaPrecio
go

Creando el índice agrupado para la vista
Create unique clustered index vistaProductosListaPrecioIDX on
vistaProductosListaPrecio (Código)
go

Ver nuevamente la estructura de la vista
sp_help vistaProductosListaPrecio
go

Crear índices para los otros campos
Create index vistaProductosDescripcionIDX on
vistaProductosListaPrecio (Descripción)
go
Create index vistaProductosDescripcionTodosIDX on
vistaProductosListaPrecio (Descripción)
include (Precio, Stock)
go
Note que se ha incluido en este último ejercicio el campo Descripción. Para mayor información Ver Include en Índices

Ejercicio 2

Crear una vista con los clientes
Create view vistaClientesLista
With SchemaBinding
As
select
C.CustomerID As ‘Código’,
C.CompanyName As ‘Cliente’,
C.ContactName As ‘Contacto’,
C.Address As ‘Dirección’,
C.Phone As ‘Teléfono’
from dbo.Customers As C
go

Creando el índice para la vista
Create unique clustered index vistaClientesListaCodigoIDX on
vistaClientesLista (Código)
go
Índices para los otros campos de la vista
Create index vistaClientesListaNombreIDX on
vistaClientesLista (Cliente)
go
Se puede incluir la cláusula Include para optimizar las consultas en la vista
Create index vistaClientesListaNombreDireccionContactoIDX on
vistaClientesLista (Cliente)
Include (Dirección, Contacto)
go