В настоящее время мне нужно больше работать с SQL Server, и я прочитал о курсорах и о том, как их следует избегать, потому что они используют много ресурсов и потому, что они медленные.
Теперь я попытался сделать некоторые базовые вещи с помощью курсора и попытался восстановить его с помощью цикла while. В конце курсор был в ~ 10 раз быстрее, чем цикл while, а ресурсы были примерно на 60-40%.
Может быть, потому что у меня есть странное примерное упражнение?
Это упражнение, которое я дал себе:
- Итерация по таблице, в этой таблице ровно один столбец: «Имена», содержащие около 1000 имен.
- Напечатайте каждое имя отдельно.
С курсором все довольно просто, но для цикла while мне нужен счетчик или что-то вроде этого. Поскольку таблица не имеет индекса, я не могу это использовать. Таким образом, мое решение состояло в том, что я создал временную таблицу, добавил все имена в таблицу и включил индекс (или номер строки). Но операция вставки занимает около 95% времени, и в конце цикл while работает медленнее, чем курсор.
Edit:
Еще я попробовал использовать WITH Names_Rows AS...
и добавить Row_Number()
в качестве столбца, а затем использовать цикл while для итерации конструкции Names_Rows
. Но это заняло еще больше времени.
Я пропустил простой способ перебора таблицы с использованием пока без индекса?