Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie ist die vergleichbare Geschwindigkeit temporärer Tabellen mit physischen Tabellen in SQL?

Temporäre Tabellen sind ein großes NEIN in SQL Server.

  • Sie provozieren Neukompilierungen von Abfrageplänen, was kostspielig ist.
  • Das Erstellen und Löschen der Tabelle sind ebenfalls kostspielige Vorgänge, die Sie Ihrem Prozess hinzufügen.
  • Wenn große Datenmengen in die temporären Daten gehen, werden Ihre Vorgänge aufgrund fehlender Indizes langsam sein. Sie KÖNNEN Indizes für temporäre Tabellen erstellen. Aber ich werde niemals eine temporäre Tabelle für irgendetwas mit einer großen Menge an Datensätzen empfehlen.

Ihr anderer Ansatz:Reguläre Tabellen zu erstellen und dann zu löschen, erzeugt nur den gleichen Overhead.

Ein weiterer Ansatz:Es könnte verwendet werden, vorhandene Tabellen zu verwenden und die Zeilen um eine zusätzliche Spalte zu erweitern, um zu unterscheiden, welche Zeilen zu jedem Benutzer/jeder Sitzung gehören. Entfernt die Last zum Erstellen/Löschen der Tabellen, aber dann müssen Sie mit dem Code paranoid sein, der den Wert generiert, um die Zeilen zu unterscheiden UND Sie müssen eine Möglichkeit entwickeln, die Tabelle für die Fälle zu verwalten, in denen eine Sitzung vorzeitig beendet wurde und es gibt Reste (Zeilen, die am Ende der Verarbeitung nicht entfernt wurden).

Ich empfehle Ihnen, Ihre Verarbeitungsstrategie zu überdenken. Einige Alternativen sind so einfach wie die Verwendung von korrelierten Abfragen, abgeleiteten Tabellen oder Tabellenvariablen. Werfen Sie einen Blick auf:http://www.sql-server- performance.com/articles/per/temp_tables_vs_variables_p1.aspx

Bearbeiten: Der Ansatz zum Erstellen und Löschen regulärer Tabellen und der Ansatz zum Wiederverwenden einer regulären Tabelle, erweitert um ein zusätzliches Feld:Beide generieren Abfrageplan-Neukompilierungen, da die geänderte Datenmenge die Neuauswertung von Tabellenstatistiken auslöst. Auch hier ist es am besten, alternative Wege zur Verarbeitung Ihrer Daten zu finden.