Какие факторы мы выбираем между циклом Cursor и while. Когда мы должны использовать курсоры и когда мы должны использовать циклы While?Когда использовать курсоры и циклы while в SQL Server
ответ
Курсоры - это петлевая конструкция, встроенная в базу данных и имеющая широкий спектр функций. Курсоры позволяют вам получать набор данных, прокручивать каждую запись и изменять значения по мере необходимости; то вы можете легко присвоить эти значения переменным и выполнить обработку этих значений. В зависимости от типа курсора, который вы запрашиваете, вы даже можете получить записи, которые вы ранее извлекли.
Поскольку курсор является фактическим объектом внутри механизма базы данных, на создание курсора и его уничтожение приходится немного накладных расходов. Кроме того, большинство операций курсора происходят в tempdb, поэтому сильно используемый tempdb будет еще более перегружен с помощью курсоров.
Цикл WHILE представляет собой конструкцию программирования, с которой вы, вероятно, знакомы с другими языками программирования. Вы определяете условие в начале цикла, и итерация будет выполняться до тех пор, пока это условие останется истинным.
Петли WHILE столь же просты в использовании, как и курсор, но иногда эти конструкции немного сложнее читать и/или понимать, поскольку запрос должен возникать в базовой таблице (таблицах), которая должна отображать один следующий ряд. Этот тип операции очень сложно сделать в ситуациях, когда ваша базовая таблица не имеет столбца первичного ключа (который должен иметь).
WHILE петли не обеспечивают некоторые из колоколов и свистов, которые поставляются с курсорами, например, возможность легко «вернуться назад» в результирующий набор. Хотя, я никогда не был в ситуации, когда я делал что-то другое, кроме прямой петли, через результирующий набор с помощью курсора.
Одним из преимуществ цикла WHILE является то, что в памяти не должны создаваться никакие объекты, чтобы облегчить цикл через набор записей, как это необходимо с помощью курсора.
EDIT
Если вы хотите проанализировать функциональность обоих, вы можете написать заявление с курсором, а также во время цикла и проанализировать количество операций чтения выполняется с помощью SQL Server Profiler. Этот инструмент даст мне комбинированное объединение считываний, сделанных для каждой записи, а не для каждой отдельной записи. Правило большого пальца говорит, что лучше, лучше.
- 1. курсоры сервера SQL, циклы и набор на основе логических
- 2. Вложенные циклы While в SQL?
- 3. SQL Server избегая курсоры
- 4. Курсоры SQL Server 2005
- 5. Курсоры SQL Server, ужасная производительность?
- 6. Циклы в C++ (while)
- 7. Возможны ли вложенные курсоры в SQL Server?
- 8. Loops и курсоры в Oracle Into Sql Server
- 9. Курсоры против цикла while - SQLServer
- 10. Циклы списка и while - Python
- 11. Как использовать while и until циклы активных записей в рельсах?
- 12. Зачем использовать курсоры в PL/SQl ORACLE?
- 13. Java вложен в циклы while
- 14. правильно использовать курсоры в pl/sql?
- 15. SQL Server: WHILE В SELECT?
- 16. Sql server while loop
- 17. Вложенные SQL-курсоры
- 18. SQL Server WHILE
- 19. Должен ли я использовать курсоры SQL здесь?
- 20. Петли и курсоры в t-sql
- 21. Курсоры работают в SQL Server 2008 R2 в 100 раз медленнее, чем в SQL Server 2000?
- 22. Выйти из while и пропустить следующие циклы
- 23. Запросы и курсоры
- 24. Java Вложенные циклы Do-While
- 25. Когда использовать транзакции в SQL Server
- 26. параметризованные курсоры в PL/SQL
- 27. PL-SQL явных курсоры
- 28. t-sql динамические курсоры
- 29. Курсоры против процедур в SQL
- 30. Как оптимизировать циклы do-while?
Вам следует избегать обоих. Избегайте RBAR, всегда идите на Set based. – mxix