Джон Сансом покрыл характеристики производительности MAX
против TOP
, однако его результаты не дали конкретного ответа на ваш вопрос.
Я думаю, что ответ заключается в том факте, что MAX
- это агрегатная функция общего назначения, предназначенная для обработки страниц и страниц данных, где TOP
- оператор, направленный только на ограничение количества выбираемых строк.
В этом одном узком случае использования оба примера запросов могут выполнять одно и то же и возвращать один и тот же результат. Запрос, использующий TOP
, извлекает выгоду из конкретных оптимизаций, предоставляемых с использованием этого метода для этого варианта использования.
Я выбросил планы XML для обоих запросов, и оператор, использующий MAX
, содержал:
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1004" />
<ScalarOperator ScalarString="MAX([db].[dbo].[TheTablesJoined].[theDate])">
<Aggregate AggType="MAX" Distinct="false">
<ScalarOperator>
<Identifier>
<ColumnReference Database="[db]" Schema="[dbo]" Table="[TheTablesJoined]" Column="theDate" />
</Identifier>
</ScalarOperator>
</Aggregate>
</ScalarOperator>
</DefinedValue>
</DefinedValues>
Оператор, использующий TOP
, содержал это вместо XML, определяющего, что агрегируется в запросе MAX
:
<TopExpression>
<ScalarOperator ScalarString="(1)">
<Const ConstValue="(1)" />
</ScalarOperator>
</TopExpression>
При использовании TOP
.
в плане выполнения намного меньше