在您的应用程序中,在提交或回滚之前保持事务处于打开状态的“长时间”是什么?分钟?秒?小时?
以及在哪个数据库上?
答案 0 :(得分:8)
我可能会因此受到抨击,但你真的应该尽量避免使用游标,因为它们会导致严重的性能损失。如果你必须使用它,你应该尽可能地保持它开放的最小时间,以便尽快释放光标阻塞的资源。
答案 1 :(得分:5)
交易:分钟。
游标:最多0秒,如果您使用游标我们会解雇您。
当您考虑我们处于高可用性Web环境中时,这不是很荒谬,必须运行sql server,我们甚至不允许存储过程,因为无法准确地版本和维护它们。如果我们使用oracle可能。
答案 2 :(得分:2)
一般来说,我同意其他答案:尽可能避免使用游标(在大多数情况下)并尽可能快地关闭游标。
但是:这完全取决于你所处的环境。
答案 3 :(得分:2)
@lomaxx,@ ChanChan:据我所知,游标只是SQL Server和Sybase(T-SQL变体)的问题。如果你选择的数据库是Oracle,那么游标就是你的朋友。我已经看过许多使用游标实际上提高了性能的情况。游标是一个非常有用的机制,并说“如果你使用光标我们解雇你”这样的事情有点荒谬。
话虽如此,您只想保持光标打开以获得所需的绝对最小值。如果不了解问题域,指定最长时间将是任意且毫无意义的。
答案 4 :(得分:2)
@ninesided:除了性能问题之外,它还涉及使用正确的工具来完成工作。如果选择将光标从查询中移出代码,我会认为在100次中有99次将循环逻辑放入某种托管代码会更好。这样做可以让您获得使用调试器,编译时错误检查,输入安全等等的优势。
我对这个问题的回答仍然是一样的,如果你正在使用游标,请尽快关闭它,在oracle中我也会尝试使用显式游标。