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

Qual è la velocità comparativa delle tabelle temporanee rispetto alle tabelle fisiche in SQL?

Le tabelle temporanee sono un grande NO in SQL Server.

  • Provocano la ricompilazione del piano di query che è costoso.
  • Anche la creazione e l'eliminazione della tabella sono operazioni costose che stai aggiungendo al tuo processo.
  • Se c'è una grande quantità di dati che va ai dati temporanei, le tue operazioni saranno lente a causa della mancanza di indici. È POSSIBILE creare indici su tabelle temporanee. Ma non consiglierò mai una tabella temporanea per qualsiasi cosa con una grande quantità di record.

L'altro approccio:creare e quindi eliminare tabelle regolari crea semplicemente lo stesso sovraccarico.

Un altro approccio:utilizzando le tabelle esistenti, è possibile utilizzare l'aumento delle righe con una colonna aggiuntiva per differenziare quali righe appartengono a ciascun utente/sessione. Rimuove l'onere di creare/eliminare le tabelle ma, quindi, dovrai essere paranoico con il codice che genera il valore per differenziare le righe E dovrai sviluppare un modo per mantenere la tabella per quei casi in cui una sessione è terminata prematuramente e ci sono avanzi (righe che non sono state rimosse al termine della lavorazione).

Ti consiglio di ripensare la tua strategia di elaborazione. Alcune alternative sono semplici come l'utilizzo di query correlate, tabelle derivate o variabili di tabella. Dai un'occhiata a:http://www.sql-server- performance.com/articles/per/temp_tables_vs_variables_p1.aspx

Modifica: L'approccio alla creazione e all'eliminazione di tabelle regolari e l'approccio al riutilizzo di una tabella normale sono aumentati con un campo aggiuntivo:entrambi genereranno ricompilazioni del piano di query perché la quantità di dati modificati attiverà la rivalutazione delle statistiche delle tabelle. Anche in questo caso, il tuo approccio migliore è trovare modi alternativi per elaborare i tuoi dati.