我有一个c#应用程序,它生成一个40k id数组,对应于postgres数据库中的记录。我需要为每个ID更新“completed”字段为“true”。我的问题是:这样做4万次是否更有效:
foreach (i in ids[]){
conn.open()
UPDATE TABLE SET "completed" = true WHERE "id" = i
conn.close()
}
或者使用一个40k项int数组:
conn.open()
UPDATE TABLE SET "completed" = true WHERE "id" IN (id[].Tostring())
conn.close()
当然,上面的代码不是正确的c#,更多的是为了说明我的问题,即对数据库进行一系列40k连接,或者使用一个连接和一个使用in语句和大数组的更新。
任何帮助都将不胜感激。
1条答案
按热度按时间au9on6nz1#
执行一个大查询可能比执行许多小查询更快。这在许多方面限制了开销,例如到服务器的网络往返、查询解析、事务管理等等。
如果你有一个非常大的值列表,
in
可能不是最佳的,甚至不起作用。我建议values()
取而代之的是: