Ich habe versucht, die folgenden Abfragen, um eine Ergebnismenge zurück zu übertreffen Excel mit ADO.Optimierung der SQL-ADO-Rückgabezeit
MAX
SELECT DISTINCT Term
FROM uSubjectivities
WHERE account_no = '1172014'
AND version_num = (SELECT max(Cast(version_num as Int)) from uSubjectivities
WHERE account_no='1172014'
AND SubjectivityID = '6472140')
AND SubjectivityID = '6472140'
AND TermType = 'Common'
TOP (1)
SELECT DISTINCT Term
FROM uSubjectivities
WHERE account_no = '1172014'
AND version_num = (SELECT TOP (1) Cast(version_num as Int)
FROM uSubjectivities
WHERE account_no='1172014'
AND SubjectivityID = '6472140'
ORDER BY version_num DESC)
AND SubjectivityID = '6472140'
AND TermType = 'Common'
UPDATE JOIN
SELECT DISTINCT Term
FROM uSubjectivities S
INNER JOIN
(
SELECT TOP (1) Cast(version_num as Int) v
FROM uSubjectivities
WHERE account_no='1172014'
And SubjectivityID = '6472140'
ORDER BY version_num DESC
) mv
ON mv.v = s.version_num
WHERE SubjectivityID = '6472140'
AND TermType = 'Common'
Beide benötigen jedoch viel länger als ich (und meine Benutzer) möchte.
Max dauert 14 Sekunden, um 15 Datensätze zurückzugeben (Typ ist varchar (max), da dies Felder mit langen Textzeichenfolgen sein können). Top 1 dauert 14 Sekunden. Join dauert 16 Sekunden
Jeder Parameter in einfachen Anführungszeichen wird letztlich in die Abfrage übergeben. Ich führe die Abfrage ungefähr 6 mal durch (könnte aber mehr oder weniger von Parametern abhängen). In meinem Beispiel dauert dieser Teil des Codes jetzt 42 Sekunden auf Max und 37 auf Top 1. 40 Sekunden für Join.
Gibt es sowieso, um diese Geschwindigkeit zu optimieren. Momentan versuchen wir, Indexierung zu vermeiden, da die Datenbank immer wieder neu indiziert werden muss.
Darüber hinaus laufen beide Abfragen in Nanosekunden innerhalb von SQLServer, so dass ich nicht weiß, warum sie in ADO so langsam sind.
EDIT Ich habe auch dies in einer gespeicherten Prozedur und rief wie dies auch von VBA geladen. Hat bei der Rückkehr nicht geholfen.
Vielleicht die Abfragen innerhalb der SS Speicherung Ihrer Verarbeitung, da als gespeicherte SS Objekte beschleunigen, werden sie optimiert werden - nur in den Parametern übergeben, wie gebraucht. – flaZer
Vergewissern Sie sich außerdem, dass Sie der "beste" Treiber zum Abrufen Ihrer Daten sind. Verwenden Sie nach Möglichkeit lieber native SQL SERVER-Treiber als die generischen ODBC-Treiber. – flaZer
Oh yeah eine andere Sache ... über diese Nanosekunden Ergebnis in SS ... sei sicher in MGMT STUDIO, dass die "volle" Ergebnismenge in Nanosekunden zurückgekehrt ist. Es ist durchaus möglich, dass Ihr Ergebnisfenster, obwohl es aussieht, als hätten Sie Ihre Ergebnisse, immer noch gefüllt ist. – flaZer