2016-03-28 14 views
0

Wir haben eine Reihe von Programmen, die Daten mit Hilfe von OPENQUERY und Datenbank verbundenen Servern aus einer SQL Server-Datenbank in eine andere verschieben können.SQL Server DELETE OPENQUERY Leistung

Wir stellen fest, dass Abfragen wie die folgenden Bestellungen Größenordnung länger dauern als erwartet.

DELETE OPENQUERY(server, 'SELECT * FROM table WHERE pkf1 = ''v1'' AND pkf2 = ''v2''') 

Zum Beispiel, wenn die oben wie folgt umgeschrieben wurde:

exec('DELETE * FROM table WHERE pkf1 = ''v1'' and pkf2 = ''v2''') at server 

oder

DELETE FROM server.schema.table WHERE pkf1 = 'v1' and pkf2 = 'v2' 

die Leistung ist nur wenige Sekunden im Vergleich zu Minuten mit OPENQUERY.

Kann jemand erklären, warum der OPENQUERY Ansatz im Vergleich so ineffizient ist? Werden die Primärschlüsselindizes nicht verwendet?

+0

lösen Sie hier einen Blick darauf werfen können https://support.microsoft.com/en-us/kb/309182 – jthalliens

+0

"Aufträge nehmen Größenordnung länger als erwartet". Deine Vorfreude ist fehlgeleitet. Ich denke, die langsame Abfrage überträgt die Datensätze lokal vor dem Löschen und die schnellen nicht. OPENQUERY gibt eine Ergebnismenge lokal und die anderen Methoden nicht zurück. Ich war jedoch nicht mit der 'at Server'-Syntax vertraut. Interessant. Sicherlich sagt Ihnen das, dass Operationen auf dem Server und nicht auf dem Client stattfinden. –

Antwort

0

öffnet Abfrage hat einen besseren Handler als einfache Abfrage wie DELETE, und Abfrage innerhalb Remote-Servers