IdList = 1,2,3,4,5,6,7,8,9,10
更好:
Foreach(id in IdList)
Update MyTable set isDeleted = 1 where id = ?id
或
Update MyTable set isDeleted = 1 where id IN (?IdList)
原谅我的伪代码,但我认为应该清楚。 我知道IN子句中列表的大小有限制。在Oracle中它曾经是255。
我认为多个sqls会慢一些,但是解析IdList会导致DB Server的开销增加。如果列表被排序会更好吗?
答案 0 :(得分:1)
对数据库的查询越少越好。那说,这个:
Update MyTable set isDeleted = 1 where id IN (?IdList)
...需要动态SQL,因为SQL不支持在IN
子句中包含逗号分隔值列表的变量。
如果您在提交之前将查询构造为字符串,请在提交之前将变量连接到该字符串。否则你将不得不使用MySQL's dynamic SQL syntax, called PreparedStatements。请参阅this link for Oracle dynamic SQL示例&资讯
答案 1 :(得分:1)
当选择基于游标的解决方案(第一个)和基于集合的解决方案(第二个)之间时,基于集合会赢得大多数的时间 - 在这种情况下我肯定会选择这两个选项中的第二个 - 它会更有效,更容易阅读/理解。