Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо CTE е по-добър от курсор/извлечена таблица/подзаявки/временна таблица и т.н.?

A (нерекурсивен) CTE не използва курсори. Това е подход, базиран на набор. Това е голямата разлика в сравнение с използването на курсори. Но това е вярно за неизползването на курсори като цяло.

Курсорите трябва да се избягват, където е абсолютно възможно (както съм сигурен, че всички сме наясно).

CTE не е непременно по-добър от използването на извлечена таблица, но води до по-разбираем TSQL код. CTE всъщност е просто стенография за заявка или подзаявка; нещо подобно на временен изглед.

Ситуацията, в която CTE може да не е най-добрият подход, е, когато оптимизаторът на плана на заявките получи неточни оценки на редовете за CTE.

Свързан въпрос:Какви са предимствата/недостатъците от използването на CTE?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Бързи съвети за поправяне и възстановяване на SQL база данни без архивиране

  2. Как да форматирате числа като валута в SQL Server (T-SQL)

  3. Преименувайте колоната на SQL Server 2008

  4. Функции, дефинирани от потребителя на SQL Server

  5. Задействане на SQL актуализиране само когато колоната е променена