Производительность подсчета и выбора запросов в PostgreSQL

У нас есть таблица БД PosgtreSQL с большим количеством данных. Интересно, какой тип запроса быстрее/имеет лучшую производительность и почему?

  1. select * from table
  2. select count (*) from table

Разные результаты. Выберите тот, который вам нужен.

jarlh 10.02.2023 11:06

Два разных вопроса, которые дают разные результаты. Почему вас вообще волнует разница во времени, необходимая для получения таких разных результатов?

Frank Heikens 10.02.2023 11:09

Их можно использовать для той же цели, потому что клиенты, как правило, предоставляют переменную ROW_COUNT. В первом случае приложение может считать количество строк, связанное с результатом, во втором — сам результат. Если вам нужны как количество, так и фактические данные, первый запрос может получить их оба сразу. Если вам нужно только количество строк, содержимое таблицы будет просто тратить IO, весить и замедлять работу, поэтому count(*) достаточно.

Zegarek 10.02.2023 11:24

Я знаю, что они делают, мне просто нужно сначала посчитать, а потом, в некоторых редких случаях, использовать данные результата. Вот почему мне интересно, лучше ли сначала делать count, а затем select, чем делать select в начале. Если у select производительность хуже, я буду использовать count

Ula 10.02.2023 16:06
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя оба запроса выполняют итерацию по всей таблице, первый запрос обычно будет работать намного хуже на уровне приложения по сравнению со вторым. Это связано с тем, что запрос select * должен будет отправить всю таблицу по сети в приложение, которое выполняет запрос. С другой стороны, запрос count(*) должен отправлять только одно целое число.

В дополнение к сетевому времени запрос № 2 может пропускать кучу и подсчитывать записи в индексе, что происходит намного быстрее.

The Impaler 10.02.2023 14:58

Другие вопросы по теме