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

Защо този 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. Преброяване на DISTINCT в множество колони

  2. Как да активирате/деактивирате достъпа до данни в SQL Server (пример за T-SQL)

  3. Кеширане на временни обекти на SQL Server

  4. Архивиране на ниво таблица

  5. Комбинирайте OUTPUT inserted.id със стойност от избрания ред