Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :INNER JOIN après UNION entraîne une correspondance de hachage lente (agrégat)

J'ai rencontré des situations où UNION a rendu une requête beaucoup plus lente que UNION ALL avec un DISTINCT ensuite. Donc, même si je n'ai pas d'explication pour le mauvais plan de requête (les statistiques et les index sont d'accord ?), Je vous suggère d'essayer ce qui suit :

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
)