SELECT oder Programm-Logik

Willi2793

Aktives Mitglied
Hallo,

ich habe eine Datenbank und möchte gerne diverse Statistiken ausgeben. Nun stellt sich mir die Frage ob ich diese Statistiken bzw. tabellen durch große SELECTs erstelle oder doch lieber durch einfache SELECTs und die eigentliche Tabelle durch Programm-Logik erstelle.

Das ganze läuft auf einer MySQL-Datenbank.

Danke und Grüße,
Willi
 
S

SlaterB

Gast
was soll man dazu sagen, entweder nervst du die DB oder das eigene Programm,
läuft nicht beides auf den gleichen Rechner, sondern die DB z.B. auf einen Super-Duper 3000 mit 999 MMMHz,
dann ist diese Entscheidung für sich schon sehr relevant, bei eigenen Rechner weniger

natürlich ist auch die Ausdruckskraft in SQL eine Frage, in Java theoretisch unbegrenzt mit allen möglichen Hilfsdatenstrukturen,
dazu gehört dann freilich auch ob man selber besser SQL oder Java beherrscht,
interessant ist ob der Code bzw. die Klassen in den die Daten überführt werden könnten, schon da ist oder sowieso noch gebraucht wird

usw., mal ehrlich, das klingt jetzt schon nach einigem, aber da war doch jetzt nichts dabei was du dir nicht selber denken kannst, oder? ;)
ich schreibe nur weil nach 5 Stunden nicht ganz zu befürchten ist, dass evtl. bessere Antworten verdrängt werden

edit:
fertig berechnete Daten, ob per SELECT oder Programm gewonnen, in Tabellen zu speichern ist fast für sich eine Frage,
man gewinnt Zeit bei der Abfrage, Ergebnisse auslesen statt erst zu berechnen ist meist schneller (aber nicht zwingend, nicht blind verfolgen),
dafür in der Regel mehr Speicherplatz nötig, Aufwand beim Einfügen + Ändern,

der klassische Gegensatz: Standard-Aufwand gegen Vorteil im 'Ernstfall'
 
Zuletzt bearbeitet von einem Moderator:

Willi2793

Aktives Mitglied
Danke für Deine Meinung. Ich denke ja auch das es nicht unbedingt ganz genau zu spezifizieren ist. Und ja, da waren auch viele meiner Gedanken dabei. Aber ich dachte das vielleicht eine Diskussion auch nochmal ganz neue Gedanken oder Argumente bringt.
 

gp

Aktives Mitglied
Mein ganz pauschal gesagt: vermeide Zugriffe auf die Datenbank, wann immer es geht. Nicht ganz ernst gemeint, aber vom Kern her: Datenbankzugriffe kosten Zeit, Operationen im RAM sind schnell. Klar, genug RAM sollte da sein.

Ein Beispiel aus meiner Praxis, als damals erste Gehversuche: ich lies per Schleife Daten aus einer MySql-Datenbank. War kein Problem mit meinen Testdaten. Als die Schleife dann in der Praxis auf ca. 1000 Durchläufe stieg, war schon ne kleine Kaffeepause nötig. Lösung: vor der Schleife alles lesen und den Rest Java machen lassen. Jetzt war wieder alles gut (und RAM war genug dafür da),

Aber: ohne konkrete Anforderungen ist alles nur Theorie. In der Praxis hilft nur messen (und schätzen), bevor es dann los geht.

Genug der Philosophie für heute abend :)

Günter
 

Willi2793

Aktives Mitglied
Das ist klar. Wenn ich für meine Auswertung die Alternative hätte entweder eine Schleife über einen kleinen SELECT und den Satz verarbeiten oder einen SELECT und Schleife über das ResultSet wäre es klar. Aber ich habe einen Riesen-Select der einmal ausgeführt wird oder halt 2-3 kleine und dann Schleifen über die ResultSets.
 

tfa

Top Contributor
Eine pauschale Aussage kann man hier nicht machen. Wenn für die Statistik Daten benötigt werden, die über zig Tabellen verteilt sind, ist eine komplexe SQL-Query sicherlich effektiver, als die halbe DB erst in den Speicher zu laden und dann rumzurechnen. Was besser ist, muss man von Fall zu Fall entscheiden.
 

gp

Aktives Mitglied
Aber ich habe einen Riesen-Select der einmal ausgeführt wird oder halt 2-3 kleine und dann Schleifen über die ResultSets.
Mein Tipp: erst mal so einfach wie möglich programmieren - der SQL-Spezialist wählt sicher das komplexe SELECT der Java-Profi vielleicht den anderen Weg.

Dann mit Produktionsdaten testen (also nicht mit einer fast leeren Datenbank). Wenn alles schnell genug läuft, bist du fertig - ansonsten den Flaschenhals suchen und den gezielt optimieren.

Ohne probieren ist das alles nur Theorie - trotz aller Erfahtung hatte ich heute geanau so ein Problem. Eine eigentlich recht einfache Abfrage dauerte Minuten. Ohne SQL-Sortierung war alles OK. Das Nachsortieren in Java kostete dann keine Zeit - und manchmal ist es halt doch wieder anders.

Günter
 

r.w.

Bekanntes Mitglied
...Eine eigentlich recht einfache Abfrage dauerte Minuten. Ohne SQL-Sortierung war alles OK. Das Nachsortieren in Java kostete dann keine Zeit - und manchmal ist es halt doch wieder anders...

Wenn die Sortierung per SQL-Statement zu lange dauert, würde ich mir eher Gedanken
über die Optimierung der Datenbank, in diesem Fall speziell der Indizes, machen.

Sollte eine Abfrage direkt auf dem Server machbar sein, wird sie in der Regel auch
schneller sein, als die Client-seitige Nachbildung in Java, oder worin auch immer.
Es sei den der Server erfüllt nicht die Voraussetzungen für diese Datenbank.
Ich rede allerdings nur von "echten" Datenbanksystemen, wie z.B. mySQL, MS SQL,
Oracle usw.

Client-seitige Zugriffe sollte man natürlich minimieren, u.A. weil sie auf die Netzlast gehen.
Genau dazu braucht man ja durchdachte SQL-Statements die die Ergebnismenge bereits
weitgehend filtern und sortieren, bevor der Client ins Spiel kommt.
 

gp

Aktives Mitglied
Wenn die Sortierung per SQL-Statement zu lange dauert, würde ich mir eher Gedanken über die Optimierung der Datenbank, in diesem Fall speziell der Indizes, machen.
Klar - auf der grünen Wiese kein Problem. In diesem Fall war mir der Zugriff auf die (fremde) Datenbank leider verwehrt - und an meine neue Abfrage hatte vor 10 Jahren noch keiner gedacht.

Ob eine Datenbank in jedem Fall schneller sortiert als eine Java-Routine, sei mal dahin gestellt. Erfahrungsgemäß schenkt sich das in der Praxis wenig (wenn der Index passt ...).

Günter
 

r.w.

Bekanntes Mitglied
Klar - auf der grünen Wiese kein Problem. In diesem Fall war mir der Zugriff auf die (fremde) Datenbank leider verwehrt - und an meine neue Abfrage hatte vor 10 Jahren noch keiner gedacht.

Ob eine Datenbank in jedem Fall schneller sortiert als eine Java-Routine, sei mal dahin gestellt. Erfahrungsgemäß schenkt sich das in der Praxis wenig (wenn der Index passt ...).

Günter

Wieso "grüne Wiese"?
Gerade bei bestehenden, größeren Datenbanken kann man oft über die
geschickte Anlage von Indizes eine Menge herausholen. Wenn Du keinen
administrativen Zugriff auf die DB hast, hilft Dir das natürlich nicht weiter. ;-)

Und gerade wenn passende Indizes gesetzt werden, sollte sich das in der Praxis
zu Gunsten der Serverseite auswirken. Voraussetzung dafür ist natürlich, dass
das SQL-Statement so formuliert wird, dass es die existierenden Indizes auch nutzt.
Sonst kann man genauso gut im Client sortieren.

Trotz allem sollte man sollte jedoch mit der Neuanlage von Indizes sparsam sein,
weil sich der Nutzen auch umkehren kann. Denn was für das Lesen und Sortieren
einen Geschwindigkeitsvorteil bringt, wirkt sich bei Schreibvorgängen eher negativ
aus, weil dort alle Indizes vom DBMS mitgepflegt werden müssen.
Die Entscheidung für bzw. gegen Indizes kann also zum Teil auch vom Verhältnis
der Anzahl an Schreibvorgängen zur Anzahl der Lesevorgänge abhängig gemacht
werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
OnDemand Select * from bringt keine Rückgabe Datenbankprogrammierung 49
OnDemand Select vs Update ins blaue, was ist teurer? Datenbankprogrammierung 11
M JPA: select all mit unterschiedlichem Tablename Datenbankprogrammierung 2
A MySQL Select und Insert in Java Datenbankprogrammierung 15
J JPA: Wie sieht der select aus? Datenbankprogrammierung 2
D geänderte SELECT Abfragen Datenbankprogrammierung 15
N SQLite Hibernate und Aufruf von Funktion SELECT last_insert_rowid() Datenbankprogrammierung 2
T sqlite select Datenbankprogrammierung 12
D Oracle NullPointerException bei select mit Null Values Datenbankprogrammierung 5
F MySQL Was bedeuten die Einzelnen Zeichen in Select Querrys? Datenbankprogrammierung 1
J SQL SELECT mit einem Array Datenbankprogrammierung 1
J SELECT Abfrage/Suche Datenbankprogrammierung 4
E Kann man in einer if-Bedingung auch SELECT-Statements überprüfen? Datenbankprogrammierung 23
M SQL-Exception trotz funktionierendem SELECT Datenbankprogrammierung 4
U PostgreSQL SELECT Statement Datenbankprogrammierung 5
L Select Anweisung wird falsch interpretiert Datenbankprogrammierung 3
C HSQLDB Platzhalter in SELECT Datenbankprogrammierung 6
I SELECT bei Datenbankverbindung Datenbankprogrammierung 6
C MySQL JPA - namedQuery (SELECT) -getResultList() - liefert falsches Ergebnis Datenbankprogrammierung 1
S select: alle ergebnisse ermitteln Datenbankprogrammierung 5
G SQLite SQLite Select für View vereinfachen/optimieren Datenbankprogrammierung 4
C SQL-Statement SELECT über 3 Tabellen Datenbankprogrammierung 5
H HSQLDB insert .... values("test1",select test2 from foo) Datenbankprogrammierung 2
D JDBC insert mit select abfrage Datenbankprogrammierung 5
J Hibernate Select auf Parameterliste Datenbankprogrammierung 3
T MySQL Dynamisch Suchen Select Datenbankprogrammierung 4
D ArrayList in Select Datenbankprogrammierung 12
N Select mit join Datenbankprogrammierung 3
F Oracle select sum() join select sum() Datenbankprogrammierung 9
B SELECT ja - INSERT nein (MySQL) Datenbankprogrammierung 3
R Oracle Performance bei SELECT mit vielen Reihen Datenbankprogrammierung 5
T MySQL Db select * und Insert schlagen fehl Datenbankprogrammierung 2
I Select-Statement optimieren Datenbankprogrammierung 14
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
R Derby/JavaDB Möglichkeit von einem Random Select! Datenbankprogrammierung 6
B Mehrfachschachtelung SELECT Datenbankprogrammierung 2
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
GianaSisters MySQL Datenbank Select error Datenbankprogrammierung 5
R Select Statement als temporärer Table Datenbankprogrammierung 7
R Derby/JavaDB Select Statement Where bedingung will nicht ganz! Datenbankprogrammierung 4
R Derby/JavaDB Select TOP Statement geht nicht Datenbankprogrammierung 3
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
F wie funktioniert if Statement in SELECT? Datenbankprogrammierung 2
J [Hibernate] Select Statement Datenbankprogrammierung 4
A SQLite SELECT von ungleichen Spaltenpaaren Datenbankprogrammierung 10
Eldorado MySQL SELECT mit GROUP BY und INNER JOIN Datenbankprogrammierung 2
M Hibernate JPQL SELECT optional? Datenbankprogrammierung 2
C Datenbank-Abfrage, if im Select Datenbankprogrammierung 9
G Aufruf von SELECT INTO Datenbankprogrammierung 8
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
X Select Query auf Substring Datenbankprogrammierung 2
S Select eines bestimmten Datensatzes Datenbankprogrammierung 4
M Select * from mydaten where ... Datenbankprogrammierung 4
T Unerwartete Datenbankausgabe bei "select now()" (es wird ein .0 angehängt) Datenbankprogrammierung 5
M Probleme bei Select in Schleife Datenbankprogrammierung 7
G SELECT liefert leere Zeilen Datenbankprogrammierung 32
M SELECT longtext -> als String behandeln Datenbankprogrammierung 6
H Select in einem Select Datenbankprogrammierung 7
G Select- Abfrage Datenbankprogrammierung 19
S Insert mit Select Datenbankprogrammierung 6
G MSSQL Server SELECT Abfrage funktioniert nicht Datenbankprogrammierung 4
R SELECT aus hsqldb mit Parameter Datenbankprogrammierung 2
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
A Problem mit einem Select-Befehl Datenbankprogrammierung 5
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
S Select über mehrere Datenbanksysteme Datenbankprogrammierung 14
P SELECT Datenbankprogrammierung 20
T select Abfrage in Java Integer speichern ? Datenbankprogrammierung 2
B fehler bei select befehl Datenbankprogrammierung 5
S Select von bis in DB2 Datenbankprogrammierung 8
S Select mit PreparedStatement Datenbankprogrammierung 2
E Ein If und ein SELECT in Oracle? Datenbankprogrammierung 2
T Select Statement auf Relation Datenbankprogrammierung 3
S PostgreSQL SELECT/UPDATE etc. Datenbankprogrammierung 4
4 Probleme mit Select abfrage Datenbankprogrammierung 4
G Fehler in der select-Abfrage Datenbankprogrammierung 3
N SELECT: Datensatz sperren Datenbankprogrammierung 6
isowiz SELECT SUM() Ergebnis in Java abfragen Datenbankprogrammierung 6
T LIMIT In SELECT Anweisung Datenbankprogrammierung 4
R Select und Insert in Schleife - Problem mit ResultSet Datenbankprogrammierung 2
G SELECT Name= " " verhindern Datenbankprogrammierung 5
G Syntax für Select - Abfrage mit Variablen Datenbankprogrammierung 39
J SELECT-Statement Datenbankprogrammierung 4
R Select auf der Konsole ausgeben Datenbankprogrammierung 2
D brauche mal kurz hilfe bei einem select-stmt Datenbankprogrammierung 6
G Select-Abfragen sind sehr langsam Datenbankprogrammierung 7
D HSQLSB SELECT Datenbankprogrammierung 9
M Programm auf dem PC bringen Datenbankprogrammierung 5
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
P USER Management in SQL übergreifend auf JAVA Programm Datenbankprogrammierung 1
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J Brauche Hilfe bei meinem Programm ! Datenbankprogrammierung 12
W Wie liest dieses Java-Programm der Compiler? Datenbankprogrammierung 3
B Java Programm und Dantebank umlagern Datenbankprogrammierung 25
X SQLite SQLite Programm beendet/führt nicht weiter aus Datenbankprogrammierung 12
G Über Internet Datenbank mit Programm abrufen Datenbankprogrammierung 17
M Verbindung von Java Programm zur Acccess Datenbank (mdb-Datei) Datenbankprogrammierung 0

Ähnliche Java Themen

Neue Themen


Oben