Pregunta

creé vista indizada (agrupado índice único en Table1_ID) vista con tal T-SQL:

Select Table1_ID, Count_BIG(*) as Table2TotalCount from Table2 inner join
Table1 inner join... where Table2_DeletedMark=0 AND ... Group BY Table1_ID

índice único también después de crear la vista, nos propusimos agrupado en la columna Table1_ID.
Así Vista consiste en dos columnas:

Table1_ID
Table2TotalCount

T-SQL para crear View es una pesada debido a group by y varios millones de filas en la Tabla 2.

Pero cuando ejecuto una consulta a una vista como

Select Total2TotalCount from MyView where Table1_ID = k

-. Se ejecuta rápido y sin costes para el servidor

También en T-SQL para la creación de vista muchas condiciones en la cláusula WHERE para columnas Table2. Y Si cambiara Table2_DeletedMark a 1 y ejecutar una consulta

Select Total2TotalCount from MyView where Table1_ID = k

nuevo - voy a conseguir resultados correctos. (Table2TotalCount disminuyó en 1).

Así que nuestras preguntas son:
1. ¿Por qué el tiempo de ejecución de la consulta disminuyó tanto cuando utilizamos vista indizada (comparar con y sin el uso de vista (aunque corremos DBCC DROPCLEANBUFFERS() antes de ejecutar la consulta para ver))
2. Después de cambiar

Table2_DeletedMark 

Vista de inmediato vuelve a calcular y obtener resultados correctos, pero lo que es el proceso detrás? no podemos imaginar que ejecuta SQL T-SQL por lo que se generó la vista cada vez que los cambios de los valores 10+ columnas que contienen en la generación de vista de T-SQL, debido a que es demasiado pesado.
Entendemos que es suficiente para ejecutar una consulta sencilla de volver a calcular los valores, depende de los valores de las columnas que cambian.
Pero, ¿cómo entender que sql?

¿Fue útil?

Solución

una vista indizada es materializada por ejemplo, sus filas que contiene (a partir de las tablas de los que depende) son almacenado físicamente en el disco - al igual que una mesa "calculada sistema" que siempre mantiene actualizada cada vez que su cambio de tablas subyacentes. Esto se hace mediante la adición del índice agrupado -. Las páginas hoja del índice agrupado en una tabla de SQL Server (o vista) son las páginas de datos, realmente

Las columnas en una vista indizada puede ser indexado con índices no agrupados, también, y por lo tanto se puede mejorar aún más el rendimiento de consulta. El lado negativo es:. Puesto que se almacenan las filas, necesita espacio en disco (y algunos datos se duplican, obviamente)

A la vista normal, por otra parte es sólo un fragmento de SQL que será ejecutada para calcular los resultados - sobre la base de lo que seleccione desde ese punto de vista. No hay representación física de ese punto de vista, no hay filas almacenados para una vista normal - Tienen que ser unido a las tablas base, según sea necesario

.

Otros consejos

¿Por qué cree que hay tantas reglas extrañas sobre lo que está permitido en las vistas indizadas, y lo que se permite que las tablas de base de hacer? Es por lo que el motor SQL de inmediato puede saber "Si yo estoy tocando esta fila, que afecta potencialmente el resultado de este punto de vista - A ver, esta fila ya no se ajusta a los criterios de vista, pero insistió en tener un COUNT_BIG (*), lo que sólo puede disminuir ese valor por uno "

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