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
)