20 MB Datenbankanfrage?

Status
Nicht offen für weitere Antworten.
P

Paula

Gast
Hallo,

ich schlage mich gerade mit folgender Datenbankanfrage herum:

"SELECT bf.Aufnahme AS abteilung, bf.* FROM bf WHERE ((bf.ID)=12"

Wenn ich diese Abfrage in Java ausführe benötigt er (laut JProfiler) 40 MB Arbeitsspeicher. Das finde ich schon etwas heftig. Als Ergebnis bekomme ich ca. 45.000 Zeilen und das ist nicht viel. Gibt es hier möglichkeiten der Speicher-Optimierung?
 

foobar

Top Contributor
Lass dir nur die Spalten zurück geben, die du wirklich brauchst und such dir einen performanten JDBC-Treiber, da gibt es Unterschiede wie Tag und Nacht.
 
P

Paula

Gast
Welcher JDBC Treiber ist denn der performanteste? Gibt es irgendwo eine Liste damit ich diese mal durchtesten kann?
 

abollm

Top Contributor
Paula hat gesagt.:

Die Geschwindigkeit der Abfrage ist in Ordnung?

Ansonsten schaue einmal nach, ob du der JVM genügend Speicher gegeben hast, evtl. hat der GC Probleme.

Zu den Treibern: Ich habe zwar schon längere Zeit nichts mehr mit MySQL getan, aber mit den von MySQL gelieferten JDBC-Treibern hatte ich nie Probleme.
 
P

Paula

Gast
Ja die Geschwindigkeit ist in Ordnung nur der Speicherverbrauch ist enorm. Wenn ich mir die DB mal näher ansehe so hat die gesamte Tabelle 335.000 Einträge und ist 50MB groß (laut phpMyAdmin). Und in Java soll eine Teilabfrage über 45.000 Einträge 40 MB groß sein?
 

Leroy42

Top Contributor
Ich bin zwar ein SQL-Anfänger aber brauchst du diese 45.000 Zeilen
denn alle auf einmal?

Hilft es vielleicht, sie mit LIMIT <von>,<anz> Schritt für Schritt
abzuarbeiten?
 

abollm

Top Contributor
Also mal einige Bemerkungen zu 45.000 selektierten Zeilen. Im Grunde ist diese Anzahl von Zeilen in einer Tabelle nicht besonders groß.

Problematisch wird es erst dann, wenn man anfängt diese Anzahl komplett z.B. in eine JTable zu schreiben. Dann erhältst du eine Art Performanz-GAU. Auch wird der Client-Speicher in diesem Fall arg beansprucht, weil ja die JTable alle diese selektierten Zeilen (womöglich hat jede Zeile mehr als 20 Spalten) darstellen und damit den entsprechend benötigten Speicher vorhalten muss. Das ist natürlich in der Praxis ziemlicher Unfug, egal ob unter Java oder unter einer anderen Programmiersprache (C++, C# ...).

Deshalb solltest du - sofern du diese Zeilen alle anzeigen lassen musst - sie sukzessive (z.B. in Schritten à max. 500 Zeilen) anzeigen lassen.
 
P

Paula

Gast
Danke für den Tipp, aber ich zeige die Daten nicht an. Ich lese diese nur aus und rechne damit etwas rum um dann eine Zeile als Endergebnis anzuzeigen.
 

abollm

Top Contributor
Paula hat gesagt.:
Danke für den Tipp, aber ich zeige die Daten nicht an. Ich lese diese nur aus und rechne damit etwas rum um dann eine Zeile als Endergebnis anzuzeigen.
Evtl. liegt genau darin der Knackepunkt, deshalb die Frage:
Wie genau liest du die Daten aus und manipulierst sie, um das Endergebnis anzuzeigen?

Magst du dazu mal ein wenig exemplarischen Code posten?
 

AlArenal

Top Contributor
In Abhängigkeit dessen, was du da berechnest, wäre es vielleicht klüger das direkt in der Datenbank zu machen und nur due (Zwischen-)Ergebnisse abzufragen...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben