.NET-Datenbankaufrufe bei Verwendung von COM Interop langsam, schnell über den Query Analyzer

Ich habe eine SQL-Abfrage, die eine Person basierend auf SSN sucht und die PersonID (Identitätsspalte) zurückgibt. Es gibt einen Index für die SSN-Spalte in der Personentabelle.

Ich habe eine alte VB 6-Anwendung, die COM / .NET-Interop zum Aufrufen dieser Abfrage verwendet. Wenn es das tut, läuft es relativ langsam. Ich habe eine Ablaufverfolgung mit SQL Profiler eingerichtet und jeder Aufruf dauert zwischen 400 ms und 600 ms.

Wenn ich dieselbe Abfrage über den Abfrageanalysator ausführe, erhalte ich eine Dauer von <30 ms. Ich habe auch eine ASP.NET-Website, die denselben exakten Aufruf ausführt und eine Dauer von weniger als 30 ms erzielt.

Normalerweise würde ich vermuten, dass der COM / .NET-Interop-Overhead die Verzögerung verursacht. Allerdings bekomme ich die Tracezeiten aus dem SQL Profiler heraus. Ich kann nicht erkennen, wie sich der Overhead auf der Clientseite auf die Zahlen auswirkt, die ich aus einem serverseitigen Datenbank-Trace erhalte.

Was könnte dieses Problem sonst noch verursachen?

BEARBEITEN

Ich habe das Problem entdeckt. Ich habe sql profiler eingerichtet, um den Ausführungsplan zu erfassen, und festgestellt, dass der Ausführungsplan beim Aufrufen der gespeicherten Prozedur über die VB-App nicht den Index für SSN verwendet. Wenn jedoch derselbe SP über asp.net oder QA aufgerufen wurde, wurde der richtige Index aufgerufen. Ich habe ein sp_recompile an den Server gesendet, und von diesem Zeitpunkt an lief die VB-App mit ausreichender Geschwindigkeit.

Was ich immer noch nicht verstehe, ist, warum die VB-App nicht denselben zwischengespeicherten Abfrageplan wie die anderen Clients verwendet hat.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage