我知道在SQL中创建和使用游标既不安全也不高效,但有时这是唯一的选择。现在这是我唯一的选择。
我的问题不是如何避免使用游标,而是如果游标仅在存储过程中动态创建的临时表上操作,那么安全性和性能问题将如何。我知道游标的运行速度比set操作慢,并且对正在迭代的表设置一个锁。我的临时表是一个相对较小的表,只包含一个int和最多50个记录类型的字段。
DECLARE @pD int
DECLARE CurDB CURSOR FOR
SELECT pD FROM #mD
open CurDB
fetch next from CurDB into @pD
etc...发布于 2014-03-06 19:45:21
是的,这是安全的!而且不!游标通常不会对正在迭代的表设置锁。此外,为了获得更好的性能,大多数情况下,您可以使用FAST_FORWARD声明游标(如果没有更新表,则需要迭代)。
您可以看到有关声明游标的文档
此外,99.9%的时间您可以用关系逻辑编写一个很好的查询,以完成游标可以完成的同样工作,但通常速度更快,内存也更少。
事实上,游标不仅笨手笨脚,而且在使用内存方面表现不佳,临时表也会消耗内存(或者tempdb,可能两者兼而有之)。
性能不仅与时间和CPU周期有关,还与资源有关!
https://stackoverflow.com/questions/22234029
复制相似问题