Sql 游标与30000记录或create 30000 update语句之间的性能考虑
哪个更好 1) 循环记录并逐个执行更新的游标 2) 创建一个包含30000 update命令的脚本Sql 游标与30000记录或create 30000 update语句之间的性能考虑,sql,sql-server,performance,sql-server-2008,cursor,Sql,Sql Server,Performance,Sql Server 2008,Cursor,哪个更好 1) 循环记录并逐个执行更新的游标 2) 创建一个包含30000 update命令的脚本 谢谢有一个非常简单的方法告诉你:去做并测量时间 除此之外,当你只有10行的时候,拥有30000行没有多大意义 出于数据迁移或维护以外的原因,以这种方式进行更新听起来也不明智,在这种情况下,性能不是问题,但维护和易读性始终是问题。两者都需要大约相同的时间,主要取决于光标的声明方式 原因?你有30000个个人更新,这通常是主要因素 请注意,由于批大小和编译时间的原因,一批中30000个单独的更新可能会
谢谢有一个非常简单的方法告诉你:去做并测量时间 除此之外,当你只有10行的时候,拥有30000行没有多大意义
出于数据迁移或维护以外的原因,以这种方式进行更新听起来也不明智,在这种情况下,性能不是问题,但维护和易读性始终是问题。两者都需要大约相同的时间,主要取决于光标的声明方式 原因?你有30000个个人更新,这通常是主要因素 请注意,由于批大小和编译时间的原因,一批中30000个单独的更新可能会失败 SQL是一种基于集合的语言,您很可能只需执行一次更新即可一次性更新所有行。如果你不能,那是因为两个原因
有了更多信息(SQL和逻辑),我们可以帮助您更多…您知道,这取决于上下文 不过,学习是有帮助的。例如SQL。您处于较低的级别,无法看到此处可能的真正优化。SQL不仅仅是更新、插入和简单的Select语句 1) 循环记录并逐个执行更新的游标 线性逐步处理。无法并行化,因为SQL本身没有可供用户使用的线程机制;优化是一个接一个的,即查询优化器一次只查看一条语句中的项 2) 创建一个包含30000 update命令的脚本 假设脚本是外部的,它可以分割工作并在多个连接上并发运行,即运行多个并行 但还有更多:
- 制作一个计算新值的脚本
- 使用buld copy API将它们大容量导入到临时表中
- 发出一个更新语句,将更新后的值从临时表转移到最终表
很大程度上取决于业务问题和逻辑的复杂性——如果是简单的更新,那么问题是:计算的还是外部驱动的?多值乘2=计算,更新地址=数据驱动(即,您需要来自某处的新数据)。3)一个脚本,它在整个集合上执行所有更新,而不是30000次更新(无论是脚本还是通过光标)@gbn一些简单的数学。这是一个民主国家。50%的人智力低于平均水平。任何感到被侮辱的人——他属于他们,因为这是高斯分布中平均值的定义。但这意味着任何智能安塞尔已经有50%的人无法理解它。