Pregunta

OK, estoy confundido acerca de vistas de SQL Server indexados (con 2.008)

Tengo una vista indizada llamado

AssignmentDetail

cuando miro el plan de ejecución para

select * from AssignmentDetail

se muestra el plan de ejecución de todos los índices subyacentes de todas las otras mesas que la vista indizada se supone que fuera abstracto.

Me gustaría pensar que el plan de ejecución woul ser simplemente un recorrido de índice agrupado de PK_AssignmentDetail (el nombre del índice agrupado para mi punto de vista), pero no lo hace.

No parece haber ninguna mejora del rendimiento con esta vista indizada lo que se supone que debo hacer? También debería crear un índice no agrupado con todas las columnas de modo que no tiene que golpear a todos los demás índices?

Cualquier penetración sería muy apreciada

¿Fue útil?

Solución

La edición Enterprise de SQL Server es lo suficientemente inteligente como para buscar y hacer uso de las vistas indizadas cuando existan. Sin embargo, si no se está ejecutando Enterprise Edition, se tendrá que indicar explícitamente a utilizar la vista indizada, como esto:

select * 
from AssignmentDetail WITH (NOEXPAND)

Otros consejos

El punto de una vista indizada no es para acelerar

SELECT * FROM MyView

Lo que le ayudará a aumentar el rendimiento es un índice en una columna de la vista en sí, como por ejemplo.

SELECT * FROM MyView WHERE ViewColumnA = 'A' and ViewColumnB = 'B'

Por lo tanto, puede tener un índice en ViewColumnA y ViewColumnB que en realidad podría existir en diferentes mesas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top