sql >> Database >  >> RDS >> Sqlserver

Onverwachte resultaten van CTE

Er is niets onverwachts aan dat resultaat, behalve misschien als je het niet begrijpt.

Elke CTE wordt each and every time er wordt naar verwezen. Ja, daarom is het mogelijk voor een eenvoudige CTE op een zeer transactionele tabel om 4 rijen in één referentie en 5 rijen in de volgende 2 niveaus lager te retourneren.

Op uw voorbeeld is dit echter vanwege de ORDER BY NEWID(), waardoor elke resolutie van de originele CTE een ander rijnummer () -ing krijgt. Dacht je dat CTE's in het geheugen worden opgeslagen en in de cache worden opgeslagen? Op de SQLFiddle-site, onder uw resultaten, staat een link "uitvoeringsplan bekijken". Het toont 2 verschillende, afzonderlijke scans van de tafel .




  1. Krijg het aantal mislukte aanmeldingspogingen voor een aanmelding vanwege een verkeerd wachtwoord in SQL Server (T-SQL)

  2. Resultaten van de ene MySQL-query gebruiken in een andere query in een PHP-omgeving

  3. Welke kolom als eerste in index plaatsen? Hogere of lagere kardinaliteit?

  4. Gegevens worden ingevuld vanaf de datum van een bepaalde tabel in plaats van alle tabellen in sqlite