Ich habe zwei Datenbankserver, die über Verbindungsserver verbunden sind. Bei beiden handelt es sich um SQL Server 2008R2-Datenbanken, und die Verbindung zum Verbindungsserver wird über eine reguläre "SQL Server" -Verbindung hergestellt, wobei der Sicherheitskontext des aktuellen Logins verwendet wird. Die Verbindungsserver befinden sich beide im selben Rechenzentrum, sodass die Verbindung kein Problem darstellen sollte.
Ich benutze die folgende Abfrage, um zu überprüfen, welche Werte der Spalte identifier
remote, aber nicht lokal verfügbar sind.
SELECT
identifier
FROM LinkedServer.RemoteDb.schema.[TableName]
EXCEPT
SELECT DISTINCT
identifier
FROM LocalDb.schema.[TableName]
In beiden Tabellen befinden sich nicht gruppierte Indizes für die Spalte identifier
. Lokal sind es etwa 2,6 Millionen Zeilen, nur im Remote-Zugriff 54. Bei Betrachtung des Abfrageplans werden jedoch 70% der Ausführungszeit für "Ausführen von Remote-Abfragen" verwendet. Beim Studium des vollständigen Abfrageplans wird 1
stattdessen die Anzahl der geschätzten lokalen Zeilen angegeben 2695380
(dies ist die Anzahl der geschätzten Zeilen, wenn nur die nachfolgende Abfrage ausgewählt wird EXCEPT
).
Die Ausführung dieser Abfrage dauert in der Tat sehr lange.
Ich frage mich: Warum ist das so? Ist die Schätzung "nur" weg oder sind Remote-Abfragen auf Verbindungsservern wirklich so teuer?