哪个更好?
1)循环30000记录并逐个执行更新的游标
2)创建一个具有30000更新命令的脚本
感谢
答案 0 :(得分:2)
两者都应该花费大约相同的时间,主要取决于如何声明CURSOR。
原因?您有30,000个个人更新,这通常是主要因素
请注意,由于批量大小和编译时间,一批中30,000个单独的UPDATE可能会失败...
SQL是一种基于集合的语言,您很可能只需一次UPDATE即可一次性更新所有行。如果你不能,那是因为2个原因
有了更多信息(SQL和逻辑),我们可以为您提供更多帮助......
答案 1 :(得分:0)
有一种非常简单的方法可以说:做它并测量时间。
除此之外,当你只有10只时,拥有30000行并没有多大意义。
出于数据迁移或维护之外的其他原因进行更新也不是明智之举,在这些情况下,性能不是问题 - 但维护和易读性总是如此。
答案 2 :(得分:0)
你知道,这取决于背景。
但是,这有助于学习。以SQL为例。您处于较低的水平,不能在此处看到真正的优化。 SQL不仅仅是Update,Insert和简单的Select语句。
1)循环30000记录并逐个执行更新的游标
线性逐步处理。无法进行并列化,因为SQL本身没有可供用户使用的线程机制;优化是逐个进行的 - 即查询优化器一次查看一个语句。
2)创建一个具有30000更新命令的脚本
假设脚本是外部的,它可以拆分工作并在多个连接上并发运行,即运行多个并行。
但还有更多:
也许有一个脚本为多次更新发出合并声明?如果您知道SQL api而不是“更新,打开游标,简单选择”,那么有很多变化。
我这样做 - 虽然有更多数据(批次为50.000,有时同时为4-6)。问题是sql批量复制有一些开销。但我这样每秒管理75.000次插入。
很大程度上取决于业务问题和逻辑的复杂性 - 如果它是简单的更新,那么问题是:计算或外部驱动?多个值乘以2 =计算,更新地址=数据驱动(即您需要来自某处的新数据)。