存储过程性能问题中的游标

时间:2012-01-10 23:18:56

标签: sql sql-server stored-procedures cursor

我发现在下面的SQL和动态SQL中使用了一个游标。 Profile提出了相当多的执行计划,我认为它必须处理这个游标。这是一个糟糕的SQL选择吗?

SET @SelectStmtSubHeader = 'SELECT DISTINCT
        dbo.dsb_testID(sh.GPCustomerID) AScursor -- RIGHT HERE
         PONumber,
        sh.GPCustomerID,
        .....

2 个答案:

答案 0 :(得分:4)

这不是游标的一个例子。

游标必须是......

DECLARE this_is_a_cursor CURSOR
FOR
  SELECT
    stuff
  FROM
    a_query

您显示的剪切代码似乎使用标量函数来派生一个值,该值与单词cursor混淆。但是有一个名为cursor的字段并不能使它成为游标。

答案 1 :(得分:3)

如果设置逻辑中存在替代方案,游标几乎总是一个不好的选择。

SQL基于集合逻辑。它们并不意味着像集合一样进行迭代。

SQL优化器通常非常擅长找到检索数据的巧妙方法。游标是一种相对简单的工具。但是ANSI SQL确实需要它,所以它通常存在。

这是Sybase的一个很好的例子

Cursor Performance Example