sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:INNER JOIN después de UNION conduce a una coincidencia de hash lenta (agregado)

He experimentado situaciones en las que UNION hizo una consulta mucho más lenta que UNION ALL con un DISTINCT después. Entonces, aunque no tengo una explicación para el plan de consulta incorrecto (¿las estadísticas y los índices están bien?), le sugiero que intente lo siguiente:

select distinct * from (
    select * 
    from #finalResults
    where intervalEnd is not null
    union all
    select            
        two.startTime, 
        two.endTime,
        two.intervalEnd,
        one.barcodeID,
        one.id,
        one.pairId,
        one.bookingTypeID,
        one.cardID,
        one.factor,
        two.openIntervals,
        two.factorSumConcurrentJobs
    from #finalResults as one
    inner join #finalResults as two
        on  two.cardID = one.cardID
        and two.startTime > one.startTime
        and two.startTime < one.intervalEnd
)