Я предполагаю, что это очень упрощенный пример? Поэтому я не могу дать вам конкретику, но простой ответ заключается в том, что кумулятивная часть запроса выполняет гораздо больше работы, чем не кумулятивная часть.
Попробуйте эти два для сравнения ...
SELECT ID,Name,StartDate,
EndDate,
rowTypeLabel AS Period
FROM dbo.sicky
И ...
SELECT ID,Name,StartDate,
EndDate,
rowTypeLabel AS Period
FROM dbo.sicky
WHERE EndDate IS NULL
OR EndDate BETWEEN CAST (DateAdd(Day, 1 - Day(getDate()), getdate()) AS DATE) AND CAST (DateAdd(month, 1, DateAdd(Day, -Day(getDate()), getdate())) AS DATE))));
Последнее, я ожидаю, займет намного больше времени.
1011 *
*
Кроме того, условия OR
для объединения нескольких частей бизнес-логики могут быть довольно сложными для оптимизатора. Это означает, что следующая структура может быть более эффективной ...
SELECT * FROM <non cumulative query>
UNION ALL
SELECT * FROM <cumulative query>