Ich habe ein table1
In db1
und table2
In db2
auf SQL Server 2008 R2.
Wenn ich eine Auswahlabfrage mache, die beide Tabellen verbindet, ist es sehr langsam, die Ergebnisse zu erhalten.
Eine einfache Abfrage wie
SELECT *
FROM db1.dbo.table1 t1
LEFT JOIN db2.dbo.table2 t2 ON t1.k1 = t2.k2
ist manchmal WIRKLICH langsam.
Ich bin mir nicht sicher, ob dies SQL Server gemeinsam ist und "wie eine Regel sein muss", um "nicht zwei Tabellen zu verbinden, die aus verschiedenen Datenbanken stammen".
In diesem Fall ... füge ich dieser Frage hinzu, dass ich eine dieser Datenbank-Binärdaten in einem Feld gespeichert habe und mich gerne von der Hauptdatenbank trennen möchte, um die Größe der Haupttabelle nicht zu erhöhen ... es ist besser, eine Datenbank dafür zu partitionieren ?
Ich habe mit zwei einfachen Tabellen getestet und das Verbinden dieser beiden Tabellen ist immer noch langsam.
Vielen Dank im Voraus für jede Hilfe.
.. Einige Jahre später aktualisieren ... 24-09-18
Stellen Sie sicher, dass die Felder, die Sie verbinden, denselben Typ, dieselbe Größe und dieselbe Sortierung haben.
Beispiel: Eine Eigenschaft ist varchar (255) und eine andere varchar (20) ... das kann ein Problem sein, da die Engine einen Typ in einen anderen umwandeln muss (eine implizite Konvertierung erfolgt) und manchmal schneller ausgeführt wird ... wenn a Wenn eine Neuindizierung oder eine Änderung in der Datenbank auftritt, können Sie sehen, dass der Beginn der Abfrage in einem bestimmten Moment viel länger gedauert hat.
Wenn Sie den Feldtyp nicht so ändern können, dass er in einer der Datenbanken / Tabellen übereinstimmt, versuchen Sie, eine explizite Umwandlung durchzuführen, um festzustellen, ob dies die Abfragegeschwindigkeit verbessert. verwenden
cast(fieldname as type(size)) = fieldName2)