我使用PostgreSQL 8.4,但我认为我的问题可以扩展到大多数RDBMS。
我需要对这些行执行更新或删除等数据更改操作,其中指定的列具有指定集合的值。例如,我想删除那些行,其中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预处理语句进行这些操作时的相同问题?
答案 0 :(得分:2)
在我看来,你应该总是使用交易。通过多种操作方法,您将在网络上进行更多的往返。使用哪些索引可能会有所不同,因此请查看查询计划。
答案 1 :(得分:0)
所以我检查了EXPLAIN ANALYZE
,PostgreSQL在遍历表时使用了IN (...)
请求的特殊过滤器。因此,主要区别在于性能:使用IN (...)
,您可以遍历表格一次。使用N个单独的请求= ?
,您将遍历表N次。虽然PostgreSQL应该优化它,所以它实际上更快,但仍然必须慢IN (...)