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.

Índice de Contenido
  1. ¿Qué son las vistas indexadas?
  2. No olvides realizar pruebas de rendimiento

¿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.

Recibe consejos de SQL en tu bandeja de entrada
El boletín de SQL Server de Newsmatic, entregado cada martes, contiene consejos prácticos que te ayudarán a ser más hábil con este poderoso sistema de gestión de bases de datos relacionales.

¡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 Linux
CREATE 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 usarlo
EXECUTE 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

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.