Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:INNER JOIN dopo UNION porta a rallentare Hash Match (aggregato)

Ho sperimentato situazioni in cui UNION ha eseguito una query molto più lenta di UNION ALL con un DISTINCT dopo. Quindi, anche se non ho una spiegazione per il piano di query errato (statistiche e indici vanno bene?), ti suggerisco di provare quanto segue:

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
)