首页 > 解决方案 > SQL 批处理是否比使用 WHERE .. IN() 子句更好?

问题描述

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

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;

https://jdbi.org/apidocs/org/jdbi/v3/sqlobject/statement/SqlBatch.html

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

标签: sqlsql-server

解决方案


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

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

最终,您应该模拟数据/数据库并运行两者来查看。


推荐阅读