Нет никакой разницы между планами.Верхний синтаксис и порядок по синтаксису будут использовать один и тот же план запроса.Однако для определенных обстоятельств может быть несколько лучший способ запросить эту информацию.
Ниже запроса фальсифицирует 100 000 строк данных в таблице с первичным ключом для поиска.Затем выполняет заполнение данных, используя синтаксис top 1, синтаксис выборки смещения и, наконец, прямой поиск с предложением where.
declare @t table
(
id int primary key clustered,
sometext nvarchar(150)
);
declare @runs int = 1;
while @runs<=100000
begin
insert @t (id, sometext)
values
(@runs, 'abc123');
select @runs=@runs+1;
end
SELECT TOP 1 [Id]
FROM @t
ORDER BY [Id] ASC;
SELECT [Id]
FROM @t
ORDER BY [Id] ASC
OFFSET 0 ROWS
FETCH NEXT 1 ROWS ONLY;
select id from @t where id=1;
Затем изображение показывает 3 плана запроса.Первые 2 запроса показывают точно такой же план, сканирование индекса с использованием первичного ключа.Однако третий запрос с предложением where показывает поиск по индексу.Это связано с тем, что не нужно сканировать весь набор данных, чтобы найти вершину, если вы уже знаете, где в куче вы ищете.
Поиск индекса имеет тенденцию работать лучше, чем сканирование, особенно в больших таблицах смного столбцов разных типов данных.В этом сценарии с очень простой структурой таблицы и 100 000 строк стоимость в текущем пакете точно такая же (17%).
Для большого набора данных я бы поспорил за подход, который выглядит примерно так:this.
declare @id int = 0;
select @id=min(id) from @t;
Затем вы можете использовать эту переменную id в предложении where, подобном этому.
select id, sometext from @t where id=@id;
, который может использовать план поиска индекса в таблице, содержащей больше строк/ сложнее, чем этот тест.