Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server:INNER JOIN após UNION leva a uma correspondência de hash lenta (agregado)


Passei por situações em que UNION 's fez uma consulta muito mais lenta que UNION ALL com um DISTINCT mais tarde. Portanto, embora eu não tenha uma explicação para o plano de consulta ruim (as estatísticas e os índices estão corretos?), sugiro que você tente o seguinte:
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
)