sql >> Databáze >  >> RDS >> Sqlserver

Neočekávané výsledky z CTE

Na tomto výsledku není nic neočekávaného, ​​možná kromě případů, kdy mu nerozumíte.

Každý CTE je vyřešen each and every time je odkazováno. Ano, to je důvod, proč je možné, aby jednoduchý CTE ve vysoce transakční tabulce vrátil 4 řádky v jedné referenci a 5 řádků v dalších 2 úrovních níže.

Ve vašem vzorku je to však kvůli ORDER BY NEWID(), které dává každému rozlišení původního CTE různé row_number()-ing. Mysleli jste si, že CTE jsou uloženy v paměti a mezipaměti? Na webu SQLFiddle pod vašimi výsledky je odkaz „zobrazit plán provádění“. Zobrazuje 2 různé samostatné skeny tabulky .




  1. Vyberte n náhodných řádků z tabulky SQL Server

  2. Obousměrná synchronizace mezi místní databází mysql a AWS RDS

  3. Je nutné do transakce zapouzdřit jeden příkaz sloučení (s insert, delete a update)?

  4. SQL najít nejoblíbenější kategorii