Optimizando consultas con COLUMNAS Calculadas

Dec 19, 2022 | Performance, SQL Server | 0 comments

Las COLUMNAS Calculadas son una muy buena opción para resolver varios situaciones en nuestros diseños de tablas SQL.

En este video tutorial te muestro cómo usarlas en conjunto con Índices para mejorar la performance de tus consultas y procesos.

Te invito también a conocer mi curso completo sobre Performance el cual podes hacer online y a tu ritmo

Video tutorial

Código de ejemplo

-- COLUMNAS CALCULADAS Y PERFORMANCE

USE ADVENTUREWORKS2019
GO

SELECT SALESORDERID,
       ORDERQTY,
	   UNITPRICE 
  FROM SALES.SALESORDERDETAIL 
WHERE ORDERQTY * UNITPRICE > 100


-- AGREGAMOS COLUMNA CALCULADA

ALTER TABLE SALES.SALESORDERDETAIL
ADD TOTAL AS ORDERQTY * UNITPRICE 

SELECT SALESORDERID,
       ORDERQTY,
	   UNITPRICE 
  FROM SALES.SALESORDERDETAIL 
WHERE ORDERQTY * UNITPRICE > 100

SELECT SALESORDERID,
       ORDERQTY,
	   UNITPRICE 
  FROM SALES.SALESORDERDETAIL 
WHERE TOTAL > 100


CREATE NONCLUSTERED INDEX [IX1]
ON [SALES].[SALESORDERDETAIL] ([TOTAL])
INCLUDE ([SALESORDERID],[ORDERQTY],[UNITPRICE])

SELECT SALESORDERID,
       ORDERQTY,
	   UNITPRICE 
  FROM SALES.SALESORDERDETAIL 
WHERE TOTAL > 100


--------------------------
---- DEMO 2
----------------------------
DROP INDEX IF EXISTS [IX1] ON SALES.SALESORDERDETAIL


ALTER TABLE SALES.SALESORDERDETAIL
DROP COLUMN TOTAL

DROP INDEX IF EXISTS IX2 ON SALES.SALESORDERHEADER

CREATE INDEX IX2 ON SALES.SALESORDERHEADER (ORDERDATE) 
INCLUDE (SALESORDERID,
                                                                PURCHASEORDERNUMBER) 

SELECT SALESORDERID,
       ORDERDATE,
	   PURCHASEORDERNUMBER 

     FROM SALES.SALESORDERHEADER 
WHERE MONTH(ORDERDATE) = 8

ALTER TABLE SALES.SALESORDERHEADER 
ADD MES AS MONTH(ORDERDATE) 

DROP INDEX IX3 ON SALES.SALESORDERHEADER

CREATE INDEX IX3 ON SALES.SALESORDERHEADER (MES) 
INCLUDE (SALESORDERID,
                                                          ORDERDATE,
                                                                PURCHASEORDERNUMBER) 
GO


SELECT SALESORDERID,
       ORDERDATE,
	   PURCHASEORDERNUMBER 

     FROM SALES.SALESORDERHEADER 
WHERE MONTH(ORDERDATE) = 8

ALTER TABLE SALES.SALESORDERHEADER 
DROP COLUMN MES

Acerca del autor

Maximiliano Accotto

Con mas de 20 años de experiencia y trayectoria trabajando con bases de datos SQL Server y BI.

Fui Microsoft MVP desde el 2005 al 2019 y soy orador frecuente para distintos eventos de Microsoft y comunidades técnicas.

Me especializado en temas de tuning, administración, performance, diseño y BI en el mundo Microsoft ya sea para ambientes locales como nube.

 

Asesoramiento

¿Necesitas resolver problemas de SQL Server o Micosoft BI?

De ser así te puedo ayudar con mi asesoramiento totalmente personalizado

0 Comments