Самый быстрый из двух SQL-запросов, отсортируйте и выберите top 1, или выберите MAX - PullRequest
5 голосов
/ 29 января 2010

Какой из следующих запросов быстрее?

1

SELECT TOP 1 order_date
FROM         orders WITH (NOLOCK)
WHERE customer_id = 9999999
ORDER BY order_date DESC

2

SELECT MAX(order_date)
FROM         orders WITH (NOLOCK)
WHERE customer_id = 9999999

Ответы [ 5 ]

10 голосов
/ 29 января 2010

С индексом order_date они имеют одинаковую производительность.

Без индекса MAX немного быстрее, так как будет использовать Stream Aggregation вместо Top N Sort.

2 голосов
/ 29 января 2010

ORDER BY почти всегда самый медленный. Данные таблицы должны быть отсортированы.

Агрегатные функции не должны так сильно тормозить, как сортировка.

Однако некоторые агрегатные функции используют сортировку как часть своей реализации. Таким образом, определенный набор таблиц в конкретном продукте базы данных должен быть проверен экспериментально, чтобы определить, что быстрее - для этого набора данных.

1 голос
/ 29 января 2010

Я бы сказал первое, потому что второе требует, чтобы оно проходило через агрегатную функцию.

Однако, как сказал marc_s, протестируйте его.

0 голосов
/ 29 января 2010

это зависит от того, насколько большой ваш стол. По второму запросу, я думаю, нет необходимости в «TOP 1», поскольку MAX возвращает только одно значение. На вашем месте я бы использовал второй запрос.

0 голосов
/ 29 января 2010

Вы не можете ответить на этот вопрос, не зная, по крайней мере, кое-что о ваших индексах (у вас есть один по customer_id, order_date?), Количеству данных в таблице, состоянии вашей статистики и т. Д. И т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...