I am creating a stored procedure in SQL Server 2016, in which I have the following query:
DECLARE
@FechaMovimiento DATETIME
SELECT
@FechaMovimiento = ISNULL(MAX(FechaMovimiento), '31/12/2014')
FROM
DB0.[dbo].[TR_TAB_OLAP_FechasCierre]
WHERE
FechaCierre <= GETDATE() -1
INSERT INTO DB1.[dbo].[HVentas_1]
(
IDTienda, Id, Numero, NumeroFactura, idhora, IdLineaDocumento,
IdDocumento, Fecha, UniqueID, Posicion, CodigoDeBarras,
CodigoNIT_Productor, CodigoAmarreProductor,
CodigoMarca, CodigoUnidad, CodigoUnidadDeEmpaque, CodigoImpuesto, CodigoAmarre_Articulo_Referencia,
CodigoFamilia, CodigoLinea, CodigoCategoria, CodigoSubcategoria,
DescripcionCortadeProducto, Descripcion, DescripcionTienda, BarraTienda, Unidades, PrecioDefecto, Precio,
Descuento, IDImpuesto, Importe, ImporteIVA, ImporteDtoTotal,
ImporteDtoTotalIva, ImporteDtoLinea, ImporteDtoLineaIva, Comentario1, Comentario2,
VolumenTotal, PrecioPorPesoVolumen, Tiendas_ActivasPorBarra
)
SELECT DISTINCT TOP 5
v.IDTienda, v.Id, v.Numero, v.NumeroFactura, v.idhora, v.IdLineaDocumento,
v.IdDocumento, v.Fecha, v.UniqueID, v.Posicion, v.CodigoDeBarras,
v.CodigoNIT_Productor, v.CodigoAmarreProductor,
v.CodigoMarca, v.CodigoUnidad, v.CodigoUnidadDeEmpaque, v.CodigoImpuesto, v.CodigoAmarre_Articulo_Referencia,
v.CodigoFamilia, v.CodigoLinea, v.CodigoCategoria, v.CodigoSubcategoria,
v.DescripcionCortadeProducto, v.Descripcion, v.DescripcionTienda, v.BarraTienda, v.Unidades, v.PrecioDefecto, v.Precio,
v.Descuento, v.IDImpuesto, v.Importe, v.ImporteIVA, v.ImporteDtoTotal,
v.ImporteDtoTotalIva, v.ImporteDtoLinea, v.ImporteDtoLineaIva, v.Comentario1, v.Comentario2,
v.VolumenTotal, v.PrecioPorPesoVolumen, 0
FROM
DB1.dbo.TR_TAB_OLAP_HVentas v LEFT JOIN DB2.[dbo].[HVentas_1] v1 WITH (NOLOCK)
ON
v.fecha = v1.fecha AND v.[UniqueID] = v1.[UniqueID] AND v.Posicion = v1.Posicion
WHERE
v1.fecha IS NULL
AND
v1.Uniqueid IS NULL
AND
v1.Posicion IS NULL
AND
v.fecha > @FechaMovimiento
This is the execution plan:
https://www.brentozar.com/pastetheplan/?id=Sy4qks9SW
It is taking too much time (around 10 minutes), even though I am taking a small quantity of records. I would like to know If there's any way to speed up this procedure.
Query timings:
@FechaMovimiento
assignment : less than 1 second.- Select distinct: less than 1 second
- Insert From Select Distinct: almost 10 minutes.
I have a non-clustered index on HVentas
on Fecha
, UniqueId
and Posicion
.
And a columnstore index in HVentas_1
.