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
Antwort
Ich glaube, Sie können Indizes für temporäre Tabellen wie auf anderen Tabellen erstellen.
Ich könnte definitiv versuchen, dass –
Dies ist eine gute Idee - sowie die Angabe eines Primärschlüssels auf Ihren temporären Tabellen. – pjp
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
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?
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. –
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.
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?
- 1. Anwenden von Joins bedingt in SQL Server
- 2. SQL Server SELECT Leistung mit JOINS
- 3. SQL Server Pattern Matching auf Joins
- 4. SQL Joins in Rails
- 5. Pass Temptabelle Sp_executesql
- 6. Ausgabe mit voller Outer-Joins in SQL Server
- 7. Intellisense für JOINs in SQL Server Management Studio
- 8. Wie viele Joins sind in SQL Server 2008 zulässig?
- 9. SQL Server CTE in Self-Joins verwiesen langsam
- 10. Erweiterte (?) SQL Joins?
- 11. SQL: Hilfe mit SQL Joins
- 12. Verwenden von SQL-JOINs
- 13. SQL Joins + Zählt
- 14. Mehrere innere Joins in SQL 2000
- 15. SQL - Vorteile von JOINs?
- 16. SQL - Zwei äußere Joins
- 17. SQL-Syntax mehrere Joins?
- 18. SQL Elaborate Joins Abfrage
- 19. SQL Mehrere innere Joins
- 20. So beschleunigen Sie die Abfrage mit mehreren INNER JOINs
- 21. HiveContext: Kann nicht in der Lage Temptabelle über JDBC-Client
- 22. SQL - beschleunigen Sie die Abfrage
- 23. SQL Joins Vs SQL-Unterabfragen (Leistung)?
- 24. SQL Self-Joins Hilfe Abfrage
- 25. SQL-Anweisung mit mehreren Joins
- 26. SQL-Joins Anzeige nur mal
- 27. SQL-Joins mit JavaScript simulieren
- 28. SQL - Unterschied zwischen diesen Joins?
- 29. Co-partitionierte Joins in Spark SQL
- 30. ‚Überspringen‘ eine Tabelle in SQL Inner-Joins
Können Sie ein Repro-Skript posten, mit dem wir spielen können? –