sql - 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 行更新到数千行。我希望在大规模(数千行)更新时它是最佳的。
解决方案
如果要将所有行的同一列更新为相同的值,则 IN 可能是更好的方向。我从来不需要查看任何一个选项的 SQLServer 查询计划,但我认为这个 IN 更好,因为它可能会在一次扫描中找到所有行。
另一方面 - 虽然运行批处理比运行单个查询更快,但它仍然可能进行多个表扫描(取决于列、索引等)。
最终,您应该模拟数据/数据库并运行两者来查看。
推荐阅读
- javascript - 相等时合并数组的连续项
- excel - 无法循环遍历单元格
- python - 如何将 CSRF 令牌添加到来自 Django 2.2 的 Angular 8 发布请求
- typescript - Typescript:如何使界面包含至少一种类型?
- javascript - 如何分离字符串并推送到反应状态?
- swift - 如何使用可编码的 swift 递归地解析 json
- typescript - 从传递的函数对象生成多个函数参数
- android - 通过错误日志 url 创建 Firestore 缺失索引不适用于多个帐户
- android - 识别用户属于美利坚合众国 50 个州中的哪个州 - 除了互联网访问权限外,无需请求其他权限
- android - Google Play 游戏服务和 64 位 x86 支持