Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:INNER JOIN nach UNION führt zu langsamem Hash-Match (Aggregat)

Ich habe Situationen erlebt, in denen UNION 's hat eine Abfrage viel langsamer gemacht als UNION ALL mit einem DISTINCT danach. Obwohl ich keine Erklärung für den schlechten Abfrageplan habe (Statistiken und Indizes sind in Ordnung?), schlage ich vor, dass Sie Folgendes versuchen:

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
)