Qué es una vista indexada y cómo mejorar el rendimiento de consultas en SQL Server
Una vista es una consulta T-SQL guardada en SQL Server. La definición de la vista se almacena para que se pueda utilizar como una tabla virtual que simplifica las consultas y agrega una capa de seguridad a las tablas base; sin embargo, no ocupa espacio en la base de datos. De hecho, una vista realmente no hace nada hasta que se consulta.
¿Qué son las vistas indexadas?
En SQL Server 2000 y 2005, tienes la capacidad de agregar índices a las vistas. Pero, si una vista es solo una definición de consulta almacenada en la base de datos sin datos propios hasta que se ejecuta, ¿cómo puedes crear un índice en esa definición? Bueno, es difícil.
¡Regístrate automáticamente hoy mismo!
Una vista indexada es una vista que ha sido materializada o almacenada en la base de datos. El índice que se crea en la vista se almacena y actualiza por el motor de la base de datos a medida que se actualiza la tabla subyacente. Las vistas indexadas funcionan muy bien en situaciones en las que el conjunto de resultados devuelve muchas filas y necesita ser agregado. Sin embargo, no es una buena idea crear una vista indexada en tablas altamente transaccionales. Esto se debe a que el motor de la base de datos debe mantener el índice en la vista a medida que se actualizan los datos de la tabla base, lo que puede degradar el rendimiento de las transacciones.
Para crear un índice en una vista, la definición de la vista debe cumplir con un conjunto determinado de condiciones y configuraciones de sesión, junto con el requisito de vincular las tablas base a la definición de la vista. Si determinas que tu vista cumple con los criterios específicos (que discutiré más adelante en este artículo), el primer índice que debes crear en tu vista es uno cluster único. El primero que se crea debe ser en un conjunto único de columnas y cluster para que el índice se materialice.
A continuación, se muestra un ejemplo de cómo se crea una vista indexada. El script creará la tabla SalesHistory y cargará datos en ella.
Cómo instalar y configurar Sybase Adaptive Server Enterprise (ASE) en LinuxCREATE VIEW vw_salesbyproduct AS SELECT Product, COUNT_BIG(*) as ProductCount, SUM(SalePrice) as TotalSales FROM dbo.SalesHistory GROUP BY Product
No lleva tiempo crear la vista porque solo es una definición de consulta T-SQL. Una vez creada la vista, puedes ejecutar consultas contra ella como si fuera una tabla.
SELECT Product, TotalSales, ProductCount FROM vw_SalesByProduct WHERE product = 'Computer'
Si estableces la opción en SQL Server Management Studio o Query Analyzer para ver el Plan de ejecución de la consulta, notarás que la consulta anterior utiliza un análisis de tabla para encontrar el resultado agregado basado en el producto "Computer". Los análisis de tabla se utilizan habitualmente en situaciones en las que no hay un índice en los datos, por lo que se analiza todo el conjunto de resultados para encontrar los resultados solicitados.
Con algunos cambios simples, puedes cambiar la vista para que puedas agregar un índice y mejorar el rendimiento de búsqueda. Primero, debes asegurarte de que las siguientes configuraciones de sesión estén establecidas:
SET ANSI_NULLS ON GO SET ANSI_PADDING ON GO SET ANSI_WARNINGS ON GO SET CONCAT_NULL_YIELDS_NULL ON GO SET QUOTED_IDENTIFIER ON GO SET NUMERIC_ROUNDABORT OFF GO
Ahora puedes crear la nueva vista de forma más sencilla:
CREATE VIEW dbo.vw_SalesByProduct_Indexed WITH SCHEMABINDING AS SELECT Product, COUNT_BIG(*) AS ProductCount, SUM(ISNULL(SalePrice,0)) AS TotalSales FROM dbo.SalesHistory GROUP BY Product GO
A continuación, se crea el índice en la vista:
CREATE UNIQUE CLUSTERED INDEX idx_SalesView ON vw_SalesByProduct_Indexed(Product)
Para demostrar que se ha creado un índice en la vista y que ocupa espacio en la base de datos, ejecuta el siguiente script para ver cuántas filas hay en el índice cluster y cuánto espacio ocupa la vista.
Qué es sudo y por qué deberías usarloEXECUTE sp_spaceused 'vw_SalesByProduct_Indexed'
La consulta SELECT a continuación es la misma que antes, excepto que esta vez realiza una búsqueda de índice cluster, que suele ser muy rápida.
SELECT Product, TotalSales, ProductCount FROM vw_SalesByProduct_Indexed WHERE Product = 'Computer'
No olvides realizar pruebas de rendimiento
Las vistas indexadas son excelentes cuando se utilizan en las situaciones correctas, ya que pueden mejorar drásticamente el rendimiento de las consultas. Sin embargo, debido a la ganancia de rendimiento adicional del índice cluster, el motor de la base de datos debe mantener ese índice durante todas las transacciones que ocurren en las tablas base de la vista. Debido a este compromiso, crear una vista indexada puede o no ser beneficioso para tu sistema. La mejor manera de determinar esto es a través de pruebas exhaustivas de rendimiento.
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a Qué es una vista indexada y cómo mejorar el rendimiento de consultas en SQL Server , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados