Курсор в вопросах производительности хранимых процедур - PullRequest
1 голос
/ 11 января 2012

Я нашел курсор, используемый в приведенном ниже SQL и динамическом SQL.Профиль поднимает довольно много планов выполнения, и я думаю, что он имеет дело с этим курсором.Это плохой выбор SQL?

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

Ответы [ 2 ]

4 голосов
/ 11 января 2012

Это не пример курсора.

Курсор должен быть ...

DECLARE this_is_a_cursor CURSOR
FOR
  SELECT
    stuff
  FROM
    a_query

Показанный фрагмент кода использует скалярную функцию для получения значения, которое псевдоним слова 1006 *. Но наличие поля с именем cursor не делает его курсором.

3 голосов
/ 11 января 2012

Курсоры - почти всегда плохой выбор, которого следует избегать, если существуют альтернативы в заданной логике.

SQL основан на заданной логике.Они не предназначены для повторения в виде коллекции.

Оптимизаторы SQL обычно довольно хороши в поиске умных способов получения ваших данных.Курсор является относительно простым инструментом.ANSI SQL требует этого, поэтому он обычно присутствует.

Вот хороший пример из Sybase

Пример производительности курсора

...