Erste Tests - eine grosse Stored-Procedure, welche die Daten aus allen vier Tabellen raussucht und in einer riesigen Ergebnismenge zurückliefert
~ 2 Sekunden für die 10fache Menge an Daten. Nach der alten Logik wären das ca. 10000 Mal
Query öffnen/schliessen. Wireshark zeigt grosse Blöcke mit "continuation data". Insgesamt werden für die 10fache Menge ca. 14 MByte an Rohdaten übers Netz geschubst! Wie überschlagen gerechnet waren es bei der kleineren Datenmenge schon über 30 MByte! Nicht benötigte Ausgabefelder, sind jetzt insgesamt 70 Stück, werden zusätzlich in der SP auch nach SUSPEND alle auf NULL gesetzt, damit man weiß welcher Datenblock gerade der notwendige ist.
Ausgabe wie folgt
SQL-Code:
AUSSENTABELLE mit Keys.... SUBTABLE1-FELDER... SUBTABLE2-FELDER... SUBTABLE3-FELDER
KEY..DATEN
KEY..NULL DATEN
KEY..NULL DATEN
KEY..NULL NULL DATEN
KEY..NULL NULL NULL DATEN
Nächster Datensatz
Hier ist allerdings noch nicht der Overhead in der Anwendung berücksichtigt die Daten in das Ausgabeformat zu verwandeln. Aber das stelle ich mir nicht mehr als so zeitkritisch vor, weil am Ende eine ca. 2 MByte grosse
ASCII-Datei dabei herauskommt.
Die Netzlast geht bei dieser Abfrage übrigens von vorher ~0.5% auf jetzt ca. 7-8% hoch!
Das scheint hier tatsächlich die Lösung zu sein, statt vieler kleiner Abfragen - auch wenn sie prepared und parametrisiert sind - eine grosse Ergebnismenge! Das ständige Öffnen/Schliessen der inneren Queries resultiert in vielen, kleinen Netzpaketen. Jetzt mache ich mich mal dran und setze die Logik für die Ausgabe um.
Vielen Dank für Eure Geduld mit mir und für die Ideen und hilfreichen Tipps
Carsten