Tabellen- und Temp-Tabellenleistung

7

Was ist schneller für Millionen von Datensätzen: Permanente Tabelle oder Temp Tabellen?

Ich muss es nur für 15 Millionen Datensätze verwenden. Nachdem die Verarbeitung abgeschlossen ist, löschen wir diese Datensätze.

    
ManishKumar1980 23.10.2009, 18:45
quelle

6 Antworten

14

In Ihrer Situation verwenden wir eine permanente Tabelle, die Staging-Tabelle genannt wird. Dies ist eine gängige Methode bei großen Importen. Tatsächlich verwenden wir im Allgemeinen zwei Zwischenspeichertabellen, eine mit den Rohdaten und eine mit den bereinigten Daten, was die Suche nach Problemen mit dem Feed einfacher macht (sie sind fast immer das Ergebnis neuer und vielfältiger Möglichkeiten unserer Kunden, uns Daten zu schicken) das müssen wir beweisen können). Außerdem vermeidet man Probleme wie die temporäre Datenbank zu vergrößern oder Probleme für andere Benutzer zu verursachen, die temporäre Datenbank benutzen wollen, aber warten müssen, während sie für Sie wächst, usw.

Sie können auch SSIS verwenden und die Staging-Tabelle (n) überspringen, aber ich finde die Möglichkeit, zurückzugehen und zu recherchieren, ohne eine 50.000.000 Tabelle neu laden zu müssen, ist sehr hilfreich.

    
HLGEM 23.10.2009, 19:14
quelle
11

Wenn Sie tempdb nicht verwenden, stellen Sie sicher, dass das Wiederherstellungsmodell der Datenbank, in der Sie arbeiten, nicht auf "Full" eingestellt ist. Dies verursacht eine Menge Overhead für diese 50M-Zeileneinsätze.

Idealerweise sollten Sie, sofern möglich, eine Staging-Datenbank, ein einfaches Wiederherstellungsmodell, auf RAID 10 verwenden und die Größe im Voraus festlegen, um genügend Speicherplatz für alle Ihre Vorgänge bereitzustellen. Deaktivieren Sie das automatische Wachstum.

Verwenden Sie INSERT ... WITH (TABLOCK), um die Protokollierung auf Zeilenebene zu vermeiden:

%Vor%

Gleiches gilt für BULK INSERT. Wenn Sie die Datei löschen und neu erstellen, erstellen Sie den Clustered-Index prior zum Einfügen. Wenn dies nicht möglich ist, fügen Sie sie zuerst in eine Tabelle ein, fügen Sie sie dann in eine andere Tabelle mit der richtigen Clusterbildung ein und schneiden Sie die erste Tabelle ab. Vermeiden Sie, wenn möglich, kleine Losgrößen auf BULK INSERT. Lesen Sie die BULK INSERT-Dokumentation aufmerksam, da Sie die Leistung mit den falschen Optionen sabotieren können.

Vermeiden Sie INSERT ... EXEC. Jede Zeile wird protokolliert.

Vermeiden Sie UPDATEs, es sei denn, Sie müssen laufende Summen berechnen. Im Allgemeinen ist es günstiger, eine Tabelle in eine andere Tabelle einzufügen und dann die erste Tabelle zu kürzen, als sie vor Ort zu aktualisieren. Laufende Summenberechnungen sind die Ausnahme, da sie mit einem UPDATE und Variablen durchgeführt werden können, um Werte zwischen Zeilen zu sammeln.

Vermeiden Sie Tabellenvariablen für alles außer Kontrollstrukturen, da sie die Parallelisierung verhindern. Verbinden Sie Ihre 50M-Zeilentabelle nicht mit einer Tabellenvariablen, sondern verwenden Sie stattdessen eine temporäre Tabelle.

Haben Sie keine Angst vor Cursorn für die Iteration. Verwenden Sie Cursorvariablen, und deklarieren Sie sie mit dem STATIC-Schlüsselwort für Spalten mit niedriger Kardinalität an der Vorderseite des gruppierten Index. Verwenden Sie diese Option, um große Tabellen in verwaltbare Abschnitte zu zerlegen.

Versuchen Sie nicht, in einer Aussage zu viel zu tun.

    
Peter Radocchia 23.10.2009 22:09
quelle
2

Die permanente Tabelle ist schneller, wenn die Tabellenstruktur zu 100% identisch sein soll, da kein Overhead für die Zuweisung von Speicherplatz und das Erstellen der Tabelle besteht.

Die Temp-Tabelle ist in bestimmten Fällen schneller (z. B. wenn Sie keine Indizes benötigen, die auf der permanenten Tabelle vorhanden sind und die Einfügungen / Aktualisierungen verlangsamen würden)

    
DVK 23.10.2009 18:50
quelle
0

Permanente Tabelle ist in den meisten Fällen schneller als temporäre Tabelle.

Sehen Sie sich Ссылка

an     
anishMarokey 23.10.2009 19:05
quelle
0

Ich persönlich würde eine permanente Tabelle verwenden und sie vor jeder Verwendung abschneiden. Nach meiner Erfahrung ist es einfacher zu verstehen / zu pflegen. Jedoch ist mein bester Rat zu Ihnen, beide zu versuchen und zu sehen, welches besser ist.

    
Mayo 23.10.2009 19:38
quelle
-1

Temporäre Tabellen sind im Speicher (außer sie sind zu groß), also sollten sie theoretisch sehr schnell sein. Aber es ist normalerweise nicht. Als Faustregel versuchen Sie, sich von temporären Tabellen fernzuhalten, es sei denn, dies ist die einzige Lösung. Kannst du uns etwas mehr darüber sagen, was du versuchst? Es könnte wahrscheinlich mit einer abgeleiteten Abfrage

getan werden     
adamJLev 23.10.2009 18:53
quelle