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