У меня есть 2 запроса: один с TOP-предложением и один без него. Результат такой же, но тот, у кого предложение TOP значительно медленнее. Почему это так?TOP clause slowing down query
Сервер: Microsoft SQL Server 2008 R2 (SP2)
Запрос 1 - Regular
insert into #Buffer (details, persistentID, productID, [date])
select de.details, lg.databaseID % 1000, lg.productID, lg.readDateTime
from Log lg with (nolock)
join LogDetails de with (nolock)
on lg.logID = de.logID
where @startDate <= readDateTime and readDateTime < @endDate
- процессорного времени: 173,640 мс
- Прошедшее время: 34700 мс
- Execution Plan
Запрос 2 - ТОП пункт
insert into #Buffer (details, persistentID, productID, [date])
select top (@count) de.details, lg.databaseID % 1000, lg.productID, lg.readDateTime
from Log lg with (nolock)
join LogDetails de with (nolock)
on lg.logID = de.logID
where @startDate <= readDateTime and readDateTime < @endDate
Примечание @count
является размер результирующего набора.
- процессорного времени: 92953 мс
- Прошедшее время: 93,732 мс
- Execution plan
Как ни странно, время ЦП Query 2 составляет половину запроса 1, и все же время, затраченное на Query 2, в 3 раза превышает время запроса Query 1.
, так как сейчас приходится заказывать результаты – Lamak
Вы посмотрели план выполнения? Я бы предположил, что запрос «TOP» не использует индекс, где выполняется другой запрос, – HoneyBadger
@Lamak Будет ли это? Нет «order by», не будет ли он просто возвращать результаты «top» в любом порядке, в котором они входят (т.е. произвольно)? – HoneyBadger