СУРБД: как лучше всего выполнить несколько операций - PullRequest
1 голос
/ 21 декабря 2011

Я использую PostgreSQL 8.4, но я думаю, что мой вопрос может быть расширен до большинства СУБД.

Мне нужно выполнить операцию изменения данных, такую ​​как обновление или удаление для тех строк, где указанный столбец имеет значениеиз указанного набора.Например, я хочу удалить те строки, где id находится в (1,4,7,8).

Вся операция должна быть либо успешной, либо неудачной, поэтому у меня есть два варианта:

  • Использовать синтаксис IN, например

DELETE FROM my_table WHERE id IN (1,4,7,8)

  • Использовать несколько отдельных операций, выполняемых в одной транзакции, например

DELETE FROM my_table WHERE id = 1;

DELETE FROM my_table WHERE id = 4;

...

Есть ли разница между этими двумя подходами при выполнении в виде простых команд SQL?Какой из них лучше?

Те же вопросы при использовании подготовленных JDBC операторов для этих операций?

Ответы [ 2 ]

2 голосов
/ 21 декабря 2011

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

0 голосов
/ 26 декабря 2011

Итак, я проверил EXPLAIN ANALYZE и PostgreSQL использует специальный фильтр для запроса IN (...) при обходе таблицы.Таким образом, основное отличие должно быть в производительности: с IN (...) вы проходите таблицу один раз.При N отдельных запросах = ? вы проходите таблицу N раз.Хотя PostgreSQL должен оптимизировать это, так что он на самом деле быстрее, но все же должен быть медленнее, чем IN (...)

...