sql >> Database >  >> RDS >> Sqlserver

Een tijdelijke tabel gebruiken met vs declareren:prestatie / verschil?

De @table syntaxis maakt een tabelvariabele aan (een echte tabel in tempdb ) en materialiseert de resultaten ervan.

De WITH syntaxis definieert een Common Table Expression die niet wordt gerealiseerd en slechts een inline-weergave is.

Meestal kunt u beter de tweede optie gebruiken. U vermeldt dat dit binnen een functie is. Als dit een TVF is, dan wil je meestal dat deze inline zijn in plaats van meerdere statements, zodat ze kunnen worden uitgebreid door de optimizer - dit zou het gebruik van tabelvariabelen onmiddellijk verbieden.

Soms echter (stel dat de onderliggende query duur is en u wilt voorkomen dat deze meerdere keren wordt uitgevoerd) kunt u vaststellen dat het materialiseren van de tussenresultaten de prestaties in bepaalde specifieke gevallen verbetert. Er is momenteel niet mogelijk om dit voor CTE's te forceren (zonder ten minste een plangids te forceren )

In dat geval heb je (over het algemeen) 3 opties. Een @tablevariable , #localtemp tabel en een ##globaltemp tafel. Alleen de eerste hiervan is echter toegestaan ​​voor gebruik binnen een functie.

Voor meer informatie over de verschillen tussen tabelvariabelen en #temp-tabellen zie hier .



  1. Verticale randen toevoegen aan uw SQL*Plus / SQLcl-uitvoerraster

  2. phpMyAdmin - kan geen verbinding maken - ongeldige instellingen - sinds ik een root-wachtwoord heb toegevoegd - vergrendeld

  3. Hoe kan ik de clientconfiguratie voor MySQL Workbench instellen zonder een geïnstalleerde server?

  4. Selecteer laatste rij in MySQL