我有一个存储过程适用于包含xml字段的表,并使用游标循环它们并运行其他一些sp。行可以很多,文档也很大。有一些迹象表明存在窒息负荷。
我想知道是否可能因为游标的工作原理,也许使用游标意味着它将整个结果集保存在内存中。我精神上总是想象游标就像在表上循环一样,这可能更像是从表中选择数据,将其存储在内存中然后循环遍历它。游标如何工作?
PS。就个人而言,我从表演和意识形态的角度讨厌游标(SQL应该基于设置),并像瘟疫一样避免它们。这是遗留代码的一个案例,我现在转换为使用临时表,但我仍然很好奇DS。
答案 0 :(得分:0)
它将取决于您使用的光标类型。键集游标仅在tempdb中存储PK,然后根据需要在其他列上进行查找。其他人可能会存储一次检索更多信息,更多行,单行等等。
以下是对每种类型的详细说明:http://searchsqlserver.techtarget.com/feature/Part-1-How-cursors-work