【问题标题】:Creating a cursor on a temp table - is it safe?在临时表上创建游标 - 安全吗?
【发布时间】:2014-03-06 19:24:18
【问题描述】:

我知道在 SQL 中创建和使用游标既不安全也不高效,但有时它是唯一的选择。现在这是我唯一的选择。

我的问题不是如何避免使用游标,而是如果游标仅在存储过程中动态创建的临时表上运行,我会遇到哪些安全问题和性能问题。我知道游标的运行速度比设置操作要慢,并且会锁定它们正在迭代的表。我的临时表是一个相对较小的表,仅包含一个 int 类型字段和最多 50 条记录。

DECLARE @pD int

DECLARE CurDB CURSOR FOR            
SELECT pD FROM #mD
open CurDB
fetch next from CurDB into @pD
etc...

【问题讨论】:

  • 你为什么不多解释一下你想要实现的目标,以便找到替代方法?
  • 在使用光标时始终佩戴安全眼镜。它们可能有助于防止你把眼睛挖出来!
  • 感谢您的回答。我戴着橡胶手套和护目镜。感谢您的关心。

标签: sql cursor temp-tables


【解决方案1】:

是的,它很安全!和不!游标通常不会锁定它正在迭代的表。 此外,为了获得更好的性能,大多数时候您可以使用 FAST_FORWARD 声明您的游标(如果他们没有更新它正在迭代的表)。

您可以查看有关DECLARE CURSOR的文档

还有 99.9% 的情况下,您可以使用关系逻辑编写一个不错的查询来完成游标可以完成的相同工作,但通常更快并且使用更少的内存。

事实上,游标不仅笨拙,而且在使用内存方面表现不佳,临时表也会消耗 RAM(或 tempdb,可能两者兼而有之)。

性能不仅与时间和 CPU 周期有关,还与资源有关!

【讨论】:

  • 感谢 Jean 的回答,我会为您的评论投票,但我没有所需的积分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2015-04-25
  • 2016-04-02
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
相关资源
最近更新 更多