sql >> Base de Datos >  >> RDS >> Sqlserver

¿Es una vista más rápida que una simple consulta?

, las vistas pueden tienen un índice agrupado asignado y, cuando lo hacen, almacenarán resultados temporales que pueden acelerar las consultas resultantes.

La propia documentación de Microsoft deja muy claro que las vistas pueden mejorar el rendimiento.

Primero, la mayoría de las vistas que la gente crea son simples vistas y no utilizan esta característica y, por lo tanto, no son diferentes a consultar las tablas base directamente. Las vistas simples se expanden en su lugar y, por lo tanto, no contribuyen directamente a las mejoras de rendimiento - Eso es cierto. Sin embargo, las vistas indexadas pueden dramáticamente mejorar el rendimiento.

Déjame ir directamente a la documentación:

Después de que se crea un índice agrupado único en la vista, el conjunto de resultados de la vista se materializa inmediatamente y se conserva en el almacenamiento físico en la base de datos, lo que ahorra la sobrecarga de realizar esta costosa operación en el momento de la ejecución.

En segundo lugar, estas vistas indexadas pueden funcionar incluso cuando otra consulta no hace referencia directamente a ellas ya que el optimizador los usará en lugar de una referencia de tabla cuando corresponda.

De nuevo, la documentación:

La vista indexada se puede utilizar en la ejecución de una consulta de dos formas. La consulta puede hacer referencia a la vista indexada directamente o, lo que es más importante, el optimizador de consultas puede seleccionar la vista si determina que la vista se puede sustituir por parte o la totalidad de la consulta en el plan de consulta de menor costo. En el segundo caso, se utiliza la vista indexada en lugar de las tablas subyacentes y sus índices ordinarios. No es necesario hacer referencia a la vista en la consulta para que el optimizador de consultas la use durante la ejecución de la consulta. Esto permite que las aplicaciones existentes se beneficien de las vistas indexadas recién creadas sin cambiar esas aplicaciones.

Esta documentación, así como los gráficos que demuestran las mejoras de rendimiento, se pueden encontrar aquí.

Actualización 2: la respuesta ha sido criticada sobre la base de que es el "índice" el que proporciona la ventaja de rendimiento, no la "Vista". Sin embargo, esto es fácilmente refutable.

Digamos que somos una empresa de software en un país pequeño; Usaré Lituania como ejemplo. Vendemos software en todo el mundo y mantenemos nuestros registros en una base de datos de SQL Server. Tenemos mucho éxito y, en pocos años, tenemos más de 1 000 000 de registros. Sin embargo, a menudo necesitamos informar las ventas a efectos fiscales y descubrimos que solo hemos vendido 100 copias de nuestro software en nuestro país de origen. Al crear una vista indexada de solo los registros lituanos, podemos mantener los registros que necesitamos en un caché indexado como se describe en la documentación de MS. Cuando ejecutamos nuestros informes de ventas en Lituania en 2008, nuestra consulta buscará a través de un índice con una profundidad de solo 7 (Log2(100) con algunas hojas sin usar). Si tuviéramos que hacer lo mismo sin VIEW y solo confiando en un índice en la tabla, ¡tendríamos que atravesar un árbol de índice con una profundidad de búsqueda de 21!

Claramente, la Vista en sí nos proporcionaría una ventaja de rendimiento (3x) sobre el simple uso del índice solo. Intenté usar un ejemplo del mundo real, pero notará que una lista simple de ventas lituanas nos daría una ventaja aún mayor.

Tenga en cuenta que solo estoy usando un árbol b recto para mi ejemplo. Si bien estoy bastante seguro de que SQL Server usa alguna variante de un árbol b, no conozco los detalles. No obstante, el punto se mantiene.

Actualización 3: Ha surgido la pregunta de si una vista indexada solo usa un índice colocado en la tabla subyacente. Es decir, parafraseando:"una vista indexada es solo el equivalente de un índice estándar y no ofrece nada nuevo o único para una vista". Si esto fuera cierto, por supuesto, ¡entonces el análisis anterior sería incorrecto! Permítanme proporcionar una cita de la documentación de Microsoft que demuestra por qué creo que esta crítica no es válida ni verdadera:

El uso de índices para mejorar el rendimiento de las consultas no es un concepto nuevo; sin embargo, las vistas indexadas brindan beneficios de rendimiento adicionales que no se pueden lograr con los índices estándar.

Junto con la cita anterior sobre la persistencia de los datos en el almacenamiento físico y otra información en la documentación sobre cómo se crean los índices en las vistas, creo que es seguro decir que una vista indexada no solo un SQL Select almacenado en caché que usa un índice definido en la tabla principal. Por lo tanto, sigo defendiendo esta respuesta.