Índices en Vistas


Índices en Vistas

  • Las vistas permiten guardar una consulta en un objeto con el objeto de tenerla  disponible mas rápidamente. Las vistas al crearse guardan el resultado en una estructura no indizada.
  • 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 crea 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

Ejercicios

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

sp_help vistaProductosListaPrecio
go
Puede notar que no tiene índices, lo que hará que las consultas en la vista sean lentas.

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 incluído los campos Precio y Stock. Ver Include en Índices

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