sql >> Database teknologi >  >> RDS >> Sqlserver

Brug med vs erklære en midlertidig tabel:ydeevne / forskel?

@table syntaks opretter en tabelvariabel (en faktisk tabel i tempdb ) og materialiserer resultaterne til det.

WITH syntaks definerer et fælles tabeludtryk som ikke er materialiseret og kun er en inline-visning.

Det meste af tiden ville du være bedre stillet ved at bruge den anden mulighed. Du nævner, at dette er inde i en funktion. Hvis dette er en TVF, vil du for det meste have, at disse skal være inline snarere end multi-sætninger, så de kan udvides af optimeringsværktøjet - dette ville øjeblikkeligt forhindre brugen af ​​tabelvariabler.

Nogle gange (f.eks. at den underliggende forespørgsel er dyr, og du vil undgå, at den udføres flere gange) kan du dog finde ud af, at materialisering af de mellemliggende resultater forbedrer ydeevnen i nogle specifikke tilfælde. Der er i øjeblikket ingen måde at tvinge dette til CTE'er (uden at tvinge en planvejledning i det mindste )

I det tilfælde har du (generelt) 3 muligheder. En @tablevariable , #localtemp tabel og en ##globaltemp bord. Men kun den første af disse er tilladt til brug i en funktion.

For yderligere information om forskellene mellem tabelvariabler og #temp-tabeller se her .



  1. Hvordan finder man ud af, om en sekvens blev initialiseret i denne session?

  2. PostgreSQL Management og Automation med ClusterControl

  3. Find det sidste indeks af en streng i Oracle

  4. Sådan finder du alle rækker med en NULL-værdi i en kolonne ved hjælp af PostgreSQL