Hallo zusammen,
ich hab hier mal eine grundsätzliche Frage zur Verwendung von Joins in Hibernate. Ich dachte immer, dass die Verwendung von Joins grundsätzlich immer zu einem Performancegewinn führt, wenn man mehrere zusammenhängende Sachen aus verschiedenen Tabellen laden will bzw. mehrere persistierte Instanzen, die in Beziehung zueinander stehen.
Jetzt hab ich heute mal bissel mit Hibernate rumgespielt und musste feststellen, dass Joins nicht immer zu einem Performancegewinn führen. Ich habe mir eine Klasse A gemacht, die beliebig viele Beziehungen zu einer Klasse B aufnehmen kann. Also eine unidirektionale 1:N Beziehung zwischen A und B.
Dann hab ich 100 Instanzen der Klasse A gemacht, jeder dieser Instanzen 500 Instanzen der Klasse B zugeordnet und den ganzen Krams in eine Datenbank gesichert. Danach wollte ich alles wieder auf zwei Arten aus der Datenbank laden und danach die Ladezeiten vergleichen: Einmal ohne HQL/Criteria und einmal mit HQL unter Verwendung eines Joins.
Ich hatte die Erwartung, dass die Variante mit dem Join eigentlich schneller sein müsste, weil ja nur ein SQL-Query an die Datenbank geht. Die Variante ohne Join muss ja 100 Queries für die A-Instanzen absetzen und dann je A-Instanz wieder 1 Query für die Liste von zugeordneten B-Instanzen.
Als ich das ganze dann laufen lies musste ich feststellen, dass beide Varianten genau gleich lang brauchen.
Jetzt bin ich bissel verdutzt... Gibt es dafür eine logische Erklärung?
Grüße und danke schon mal im Vorraus
ich hab hier mal eine grundsätzliche Frage zur Verwendung von Joins in Hibernate. Ich dachte immer, dass die Verwendung von Joins grundsätzlich immer zu einem Performancegewinn führt, wenn man mehrere zusammenhängende Sachen aus verschiedenen Tabellen laden will bzw. mehrere persistierte Instanzen, die in Beziehung zueinander stehen.
Jetzt hab ich heute mal bissel mit Hibernate rumgespielt und musste feststellen, dass Joins nicht immer zu einem Performancegewinn führen. Ich habe mir eine Klasse A gemacht, die beliebig viele Beziehungen zu einer Klasse B aufnehmen kann. Also eine unidirektionale 1:N Beziehung zwischen A und B.
Dann hab ich 100 Instanzen der Klasse A gemacht, jeder dieser Instanzen 500 Instanzen der Klasse B zugeordnet und den ganzen Krams in eine Datenbank gesichert. Danach wollte ich alles wieder auf zwei Arten aus der Datenbank laden und danach die Ladezeiten vergleichen: Einmal ohne HQL/Criteria und einmal mit HQL unter Verwendung eines Joins.
Ich hatte die Erwartung, dass die Variante mit dem Join eigentlich schneller sein müsste, weil ja nur ein SQL-Query an die Datenbank geht. Die Variante ohne Join muss ja 100 Queries für die A-Instanzen absetzen und dann je A-Instanz wieder 1 Query für die Liste von zugeordneten B-Instanzen.
Als ich das ganze dann laufen lies musste ich feststellen, dass beide Varianten genau gleich lang brauchen.
Jetzt bin ich bissel verdutzt... Gibt es dafür eine logische Erklärung?
Grüße und danke schon mal im Vorraus