Подтвердить что ты не робот

MAX vs Top 1 - что лучше?

Мне пришлось просмотреть какой-то код, и я наткнулся на то, что кто-то сделал, и не могу придумать причину, по которой мой путь лучше и, вероятно, нет, поэтому что лучше/безопаснее/эффективнее?

SELECT MAX(a_date) FROM a_table WHERE a_primary_key = 5 GROUP BY event_id

ИЛИ ЖЕ

SELECT TOP 1 a_date FROM a_table WHERE a_primary_key = 5 ORDER BY a_date

Я бы пошел со вторым вариантом, но я не уверен, почему, и если это правильно.

4b9b3361

Ответ 1

Производительность обычно схожа, если ваша таблица индексирована.

Стоит учесть, что: Top обычно имеет смысл только в том случае, если вы заказываете свои результаты (в противном случае Top чего?)

Заказ результата требует большей обработки.

Мин не всегда требует упорядочения. (Просто зависит, но часто вам не нужен порядок или группа и т.д.)

В ваших двух примерах я ожидаю, что скорость/x-план будет очень похожей. Вы всегда можете обратиться к своей статистике, чтобы убедиться, но я сомневаюсь, что разница будет значительной.

Ответ 2

1) Когда есть кластеризованный индекс в таблице и запрашиваемый столбец, оператор MAX() и запрос SELECT TOP 1 будут иметь почти идентичную производительность.

2) Когда нет кластеризованного индекса в таблице и столбца для запроса, оператор MAX() обеспечивает лучшую производительность.

Ссылка: http://www.johnsansom.com/performance-comparison-of-select-top-1-verses-max/

Ответ 3

Это разные запросы.

Первый возвращает много записей (самый большой a_date для каждого event_id, найденный внутри a_primary_key = 5)

Вторая возвращает одну запись (наименьшее a_date, найденное внутри a_primary_key = 5).

Ответ 4

Чтобы запросы имели одинаковый результат, вам понадобится:

SELECT MAX(a_date) FROM a_table WHERE a_primary_key = 5

SELECT TOP 1 a_date FROM a_table WHERE a_primary_key = 5 ORDER BY a_date DESC

Лучший способ узнать, что быстрее, - проверить план запроса и выполнить свои тесты. Существует множество факторов, которые влияют на скорость, например, размер таблицы/кучи и т.д. И даже разные версии одной и той же базы данных могут быть оптимизированы для поддержки одного запроса по сравнению с другим.

Ответ 5

Я выполняю max и top на одной таблице с 20 000 000+ записей, и обнаружил, что Топ дает более быстрый результат с порядком, чем max или min.

Итак, лучший способ - выполнить оба запроса один за другим в течение некоторого времени и проверить время, прошедшее через соединение, чем.

Ответ 6

MAX и TOP работают по-разному. Ваш первый запрос вернет максимальное значение, найденное для a_date, которое имеет a_primary_key = 5 для каждого найденного event_id. Второй запрос просто захватит первый a_date с a_primary_key = 5, найденным в результирующем наборе.