2009-11-12 15 views
14

¿Puede alguien explicarme en inglés simple cómo funciona un índice en una vista? Tengo una comprensión bastante simple de los índices en las tablas; ¿Cómo funcionaría la indexación de una vista de forma diferente a simplemente dejar que los índices en las tablas subyacentes hicieran su trabajo de forma natural?¿Cómo funcionan los índices en las vistas?

Respuesta

8

Digamos que tienes una vista que limita la mesa para ciertas filas:

create view dbo.vw_HotProducts 
as 
select * from dbo.Products where Hot = 1 

Ahora bien, si se crea un índice en este punto de vista, el índice sólo contiene productos calientes. Puede compararlo para almacenar el resultado de la vista en una tabla temporal. Esto puede ser muy útil para consultas complicadas con múltiples combinaciones; básicamente, su salida está en la memoria caché.

La gran desventaja de las vistas indizadas es que se vuelven a crear cada vez que cambian los datos de la tabla subyacente. Eso restringe el uso de vistas indizadas a datos que no cambian a menudo, generalmente en un almacén de datos o en un entorno de inteligencia empresarial.

+0

podemos crear un índice sobre la base de una columna (que no son clave) de vista? –

+0

@ Q8-coder: un índice en una vista debe agruparse y ser único. Por lo tanto, puede elegir una columna que no sea clave, siempre que identifique de manera única una fila en el resultado de la vista – Andomar

+2

@Andomar: no es cierto que una vista indexada se vuelva a crear en cualquier cambio de datos. SQL Server modificará la vista materializada para reflejar cualquier cambio en las tablas base. Es por eso que SQL Server impone tantas restricciones sobre qué vistas se pueden materializar: pocas agregaciones, sin uniones externas, sin uniones, sin uniones automáticas, etc. Concedido, solo modifica los datos a través de INSERTAR/ELIMINAR y no ACTUALIZAR. Pero he visto vistas indexadas utilizadas con éxito en una aplicación OLTP uniendo mesas de millones de filas. YMMV – Tadmas

5

Ver http://msdn.microsoft.com/en-us/library/aa258260(SQL.80).aspx

La creación de un índice agrupado único en una vista mejora el rendimiento de las consultas porque la vista se almacena en la base de datos de la misma manera una tabla con un índice agrupado se almacena.

La vista se transforma de una vista adecuada en una mesa. La definición de vista se usa para actualizar esta tabla.

Oracle llama a estas "vistas materializadas".

+2

y dado que una vista indizada ahora realmente es una tabla mantenida por el sistema, también se pueden crear índices adicionales no agrupados en ella –

+0

Ambos: * puede * crear índices NC en una vista. Lo hago .. – gbn

+0

Parece que el primer índice que crea debe ser único y agrupado para definir la tabla de caché. ¡Los índices adicionales pueden no ser únicos, como dice marc_s! – Andomar

6

Una vista en sí misma no es real o "persistente", y no tiene ningún beneficio de rendimiento. Es simplemente un macro that's expanded.

Agregue un índice y existe físicamente (persistió), por lo que el optimizador considerará usarlo. No es un macro entonces.

Estoy seguro de que Oracle los llama "vistas materializadas", que es un nombre mejor.

Un relacionada FYI: una columna calculada tiene una opción PERSISTED que hace lo mismo ...

+0

+1 por el FYI - gracias –

Cuestiones relacionadas