2009-08-25 12 views
3

Ich habe 2 temporäre Tabellen # temp1 und #temp. Beide haben eine Schlüssel- und Datumsspalte. Beide haben etwa 25.000 Zeilen. Und ich verbinde sie auf der Basis des Schlüssels und des Datums, die in allen Zeilen einzigartig sind. Es dauert ungefähr 4 Minuten, bis dieser Beitritt abgeschlossen ist. Gibt es eine Möglichkeit, es zu beschleunigen oder alternative Methoden?Temp-Tabelle Joins in SQL Server beschleunigen

+0

Können Sie ein Repro-Skript posten, mit dem wir spielen können? –

Antwort

6

Ich glaube, Sie können Indizes für temporäre Tabellen wie auf anderen Tabellen erstellen.

+0

Ich könnte definitiv versuchen, dass –

+0

Dies ist eine gute Idee - sowie die Angabe eines Primärschlüssels auf Ihren temporären Tabellen. – pjp

+0

Ich bin mir nicht sicher, ob ein Index für 25k Ihnen einen Leistungsvorteil bringt. Wenn ich mich erinnere, scheint es einen Schwellenwert zu geben, bevor SQL Server beginnt, einen Index zu verwenden. Sonst wird es Scans in Tabellenform durchführen, weil es jedes Mal schneller ist als das Traversieren und Indexieren. Ich würde die beiden benchmarken. – uriDium

1

Ich habe den Verdacht, dass Ihre ganze Anfrage vielleicht aussehen möchte. Es kann einen anderen Weg geben, dieses besondere Kaninchen zu häuten.

Könnten Sie etwas mehr Details hinterlassen?

+0

Ich bin nicht für meine Query-Schreibfähigkeiten bekannt. Aber dieser Indexierungsratschlag scheint zu funktionieren. Ich habe einen Clustered-Index für die Join-Spalten einer temporären Tabelle erstellt und die zurückgegebenen Ergebnisse jetzt relativ schnell angezeigt. –

1

Je nachdem, was Sie tun, könnten Sie wahrscheinlich die temporären Tabellen vollständig vermeiden und eine Set-basierte Lösung (die viel schneller und besser skalieren), aber das ist schwer zu wissen, was Ihre Abfrage ist.

3

Wenn Ihr Beitritt von 25k Tabellen 4 Minuten dauert, ist etwas falsch mit ihm.

Wahrscheinlich haben Sie eine falsche JOIN Bedingung, die zu einer kartesischen Join (oder etwas in der Nähe), die in 25k * 25k = 625M Datensätze zurückgegeben wird, setzen zurückgegeben.

Dies kann 4 Minuten dauern, wenn nicht mehr, aber ich glaube nicht, dass es das war, was Sie wollten.

Wahrscheinlich haben Sie DISTINCT/GROUP BY Klauseln in Ihrer Abfrage, die die Abfrage auf korrekte Ergebnismenge, aber in einer nicht optimalen Weise zurückgibt.

Könnten Sie bitte Ihre Anfrage posten, so dass ich den genauen Grund sagen kann?