Ik heb situaties meegemaakt waarin UNION
heeft een zoekopdracht veel langzamer gemaakt dan UNION ALL
met een DISTINCT
daarna. Dus hoewel ik geen verklaring heb voor het slechte zoekplan (statistieken en indexen zijn oké?), raad ik je aan het volgende te proberen:
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
)