| 

.NET C# Java Javascript Exception

2
Hallo zusammen,

falls ein paar SQL Experten unter euch sind und für eine Werbeagentur arbeiten oder im Online Gaming Bereich tätig sind, würde ich gerne wissen ob ihr JOINs bei euren Abfragen verwendet oder nicht?

Mir wurde gesagt (und ich soll mich auch dran halten) joins bloß nicht zu verwenden, da bei joinen von großen Tabellen der Arbeitsspeicher eines Servers voll läuft. Falls also 1000 Besucher auf eine Website gelangen sorgt eine Abfrage mit einem Join dafür, dass die komplette Tabelle in den Speicher geladen wird, bevor gejoint wird. Und das x1000, was dann entsprechend groß wird.

So gesehen ist dann das aufteilen der Join-Abfrage in 2 simplere Abfragen und eine davon in eine Schleife (mit PHP, Java oder einer sonstigen Sprache, kein SQL-Skript) viel besser für den Server als irgendwelche Joins. Ich kann das irgendwie schwer glauben, da ich der Meinung bin, dass eine schnellere Ausführung der Abfrage besser ist als unnötig komplexeren Code zu schreiben. Oder was meint ihr?
News:
19.06.2016
Riodos 11 1 2
1 Antwort
1
Nach unserer Erfahrung handelt es sich dabei um ein modernes "Märchen".
Die Geschwindigkeit mit der aktuelle Datenbanksysteme (wir verwenden fast ausschließlich MS SQL Server) Joins ausführen, kann nach unserer Erfahrung nicht mit einer Clientprogrammierung erreicht werden. Die Daten der zu verbindenden Tabellen müssen ja zu Client übertragen und dort verarbeitet werden.

Wenn Joins nicht performant vom Datenbanksystem bearbeitet werden, dann liegt das am häufigsten an fehlenden, passenden Indexdateien, sodass ein Tabellenscan notwendig wird.

Das Argument mit der Last bei Abfragen über das Web zieht in der Regel ebenfalls nicht. Datenbanksysteme bauen Caches mit Abfragen auf. Tritt also eine Abfrage mit ähnlichen Parametern (z.B. weil Tabellenwertfunktionen für die Abfrage verwendet werden) mehrfach auf, dann werden die Abfragen aus dem Cache OHNE erneuten Aufbau des Plans verwendet.

FAZIT aus unserer Sicht: Das Ausführen von Verbindungen zwischen Tabelle via SQL ist nur in extremen Ausnahmefällen schneller, als die Ausführung via SQL direkt auf den SQL-Server!

Was u.U. wichtig sein kann: Um die Anzahl der Joins zu vermindern, ist es manchmal sinnvoll denormalisierte Sichten auf Seiten des SQL-Servers zu verwenden. Dies macht u.U. bei Datenmodellen, die sich in der 3. Normalform oder höher befinden, Sinn.
Wir verwenden im Rahmen von MS SQL Server am häufigsten Tabellenwertfunktionen für derartige Abfragen und aktualisieren die Statistiken des Datenbankservers regelmäßig. Außerdem ist eine regelmäßige Überwachung und Optimierung der Indexe sinnvoll.
20.06.2016
edvservice 1,2k 6
erstmal, danke für die antwort ;-) genauso habe ich auch mal gearbeitet (bei einem anderen unternehmen), mit Tabellenwertfunktionen, gespeicherten Prozeduren, etc.

Nur dann verstehe ich nicht wie einige Unternehmen (mein jetztiges eingschlossen) behaupten joins wären tabu. Ein Arbeitskollege musste mal für ein online gaming unternehmen alle joins entfernen, wodurch sie dann 6 von 7 servern abschalten konnten. Ein anderes Unternehmen mit ca. 50 - 100 Mitarbeitern, davon 6 Entwickler sagen genau das gleiche über joins. Von daher weiß ich nicht so recht ob daran doch etwas dran sein kann?
Riodos 20.06.2016
Könnte es sein, dass die Kollegen NoSQL-Datenbanken meinen? Das wäre für mich ein typisches Szenario.
Wenn man nicht Tabellen mit gerade zig Millionen Datensätzen in einer relationalen Datenbank halten möchte (solche haben wir bei uns nicht!), sollten Joins wirklich kein Problem darstellen. Alles andere gehört für mich in eine NoSQL-Datenbank, die dafür optimiert ist (Neo4j vielleicht), denn dann werden ich typischerweise Objekte (Dokumente) speichern und nur wenige Zugriffswege haben.
edvservice 21.06.2016
nein, leider nicht, sonst hätten sie es schon erwähnt. Das Gespräch über noSQL kam erst danach auf, als man mir erklären/weiß machen wollte, dass joins "tödlich" für den Arbeitsspeicher sind, besonders im Online-Bereich (sprich Websiten, Shops, Gaming) wo viele User den auf einmal Zugriff haben wollen. Von einer anderen Quelle habe ich erfahren, dass es nicht primär an den joins liegt, sondern eher an den fetch-Befehlen im PHP-Sektor. Die könnten eine menge Daten in den Hauptspeicher des Servers laden, aber das muss ich selbst erstmal durch eigene Tests gegenprüfen.
Riodos 22.06.2016

Stelle deine Sql-Frage jetzt!