Какой запрос более эффективен? (Postgresql) - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть таблица, в которой будет много записей (миллионов). Когда одно из значений ".._ ups" установлено в 0, мне нужно проверить, все ли другие типы "ups" для этой записи также равны 0, и удалить его. Это происходит потому, что пользователь может отменить свои «взлеты» определенного типа, но не другого типа. Если они отменяют каждый тип «вверх», я хочу удалить запись.

Поле time_unit - это единица времени, которая меняется каждые 5 минут. Таким образом, каждый голос записывает, к чему time_unit принадлежит.

Является ли более эффективным поиск только (удаление) голосов с этой единицей времени или поиск (удаление) всех голосов в (потенциально огромной) таблице? Я планирую индексировать time_unit. Мне трудно это проверить, потому что у меня еще нет записей.

Запрос 1

DELETE FROM ups 
WHERE time_unit = $tuid AND big_ups = 0 AND sol_ups = 0 AND blue_ups = 0;

или

Запрос 2

DELETE FROM ups 
WHERE big_ups = 0 AND sol_ups = 0 AND blue_ups = 0;

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

При первом запросе (с использованием time_unit=$tuid при индексировании) база данных перейдет непосредственно к этой записи (только) и просто проверит, равны ли другие столбцы нулю для удаления. Во втором запросе база данных должна пройти через все записи (полное сканирование таблицы) и проверить, есть ли в ваших столбцах нули.

1 голос
/ 07 ноября 2019

Ваше условие поиска ясно:

Удалите все строки, где все три подъема равны нулю.

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

Тогда второй запрос будет лучшим, если у вас будет правильный индекс. Нужный вам индекс:

create index ix1 on ups (big_ups, sol_ups, blue_ups);

. С этим индексом удаление должно быть достаточно быстрым, поскольку PostgreSQL выполняет логическое удаление в куче, а не физическое.

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