SQL批处理是否优于使用WHERE。。IN()子句?

SQL批处理是否优于使用WHERE。。IN()子句?,sql,sql-server,Sql,Sql Server,如果某个列值匹配,我想更新一组行 UPDATE table_name SET column_b = :newValue WHERE column_a IN (value1, value2, ... valueN); 与使用where in子句相比,SQL批处理是一种最佳选择吗 @CreateSqlBatch UPDATE table_name SET column_b = :newValue WHERE column_a = value1; 查询可能会从1更新到数千行以上。我希望它

如果某个列值匹配,我想更新一组行

UPDATE table_name 
SET column_b = :newValue 
WHERE column_a IN (value1, value2, ... valueN);
与使用where in子句相比,SQL批处理是一种最佳选择吗

@CreateSqlBatch
UPDATE table_name 
SET column_b = :newValue 
WHERE column_a = value1;


查询可能会从1更新到数千行以上。我希望它在大规模(数千行)更新时是最佳的。

如果要将所有行的同一列更新为相同的值,那么IN可能是更好的方向。我从来没有为这两个选项查看过SQLServer查询计划,但我认为这样更好,因为它可能会在一次扫描中找到所有行

另一方面,虽然运行批处理比运行单个查询更快,但它仍可能执行多个表扫描(取决于列、索引等)


最后,您应该模拟数据/数据库,并运行这两个程序来查看。

这取决于您的情况

案例1:您希望为数值条件范围的特定列更新相同的值,然后您可以写入: 更新表_Name SET Column_A='ABC',其中Column_B介于1和20之间

案例2:如果你想更新不同的条件值,那么你可以写 更新表_Name SET Column_A='ABC',其中Column_B位于(1,3,6,7)中

案例3:如果您只想更新一个条件,那么
更新表\u Name SET Column\u A='ABC',其中Column\u B=4

性能方面-一次更新一行是不好的,一次更新所有行可能是好的,更新一组行更好(优化)。你看,你触摸桌子的次数越多,IO就越多,操作所消耗的时间也就越多。所以,找到优化的解决方案——要么一次所有行,要么一堆。这取决于“SQL批处理”的作用。我猜这是一个库,它为每个输入项生成一个update语句,然后运行它。这将是比较慢的,但是每个单独的更新都会被提交。在这些情况下,我甚至会考虑子选择。