Ich habe 2 Tabellen:
Buch (ID, Titel, Alter) ---- & gt; 100 Millionen Zeilen
Autor (id, book_id, name, born) ---- & gt; 10 Millionen Zeilen
Nun, angenommen, ich hätte eine generische ID eines Buches. Ich muss diese Seite ausdrucken:
%Vor%Also ... was ist der beste Weg, dies zu tun?
1) Einfach verbinden wie folgt:
%Vor%2) Um den Join zu vermeiden, könnte ich 2 einfache Abfragen machen:
%Vor%Was ist der effizienteste Weg?
Der erste. Es ist nur eine Hin- und Rückfahrt. Es erfordert ein wenig Verarbeitung, um die Zeilen der Autoren in eine kommagetrennte Liste zusammenzufassen, wie Sie wollen, aber das ist im Grunde Standardcode.
Separate verwandte Abfragen sind eine schlechte Angewohnheit, die Ihre Leistung schneller als die meisten Dinge töten wird.
Die beste Option besteht darin, Geschwindigkeitstests auf Ihrem eigenen Server auszuführen. Abhängig davon, wie oft auf die verschiedenen Tabellen zugegriffen wird, kann beides schneller sein.
Dies wurde zuvor ausführlich beantwortet: LINKER VERBINDUNG vs. mehrere SELECT-Anweisungen
Rundreise-Minimierung und Förderung von vernünftigen Ausführungsplänen sind die wichtigsten Punkte auf meiner Leistungsliste.
Wenn Sie eine Situation mit statischen Abhängigkeiten zwischen Feldern in einer Abfrage haben, die verhindern, dass das Optimierungsprogramm einen Index verwendet, dann führt das Aufteilen in separate Abfragen zu enormen Leistungssteigerungen, wenn Indizes verwendet werden und die Zeilenanzahl des Datasets steigt. Bei den meisten Datenbanktransportprotokollen entsprechen die zusätzlichen Ergebnismengen den zusätzlichen Roundtrips. Dies kann möglicherweise Auswirkungen auf die Leistung haben, wenn auf Daten regelmäßig über ein WAN zugegriffen wird. Fortunatly gibt es Möglichkeiten, Ihren Kuchen zu haben und es auch zu essen:
%Vor%In Ihrem konkreten Beispiel würde ich # 1 mit einer Warnung wählen, um zu überlegen, was passieren würde, wenn für ein bestimmtes Buch keine Autoren in der Datei wären.
Ich weiß, dass es keine Überlegung sein sollte, aber die erste Abfrage gibt Ihnen ein Ergebnis zurück, das wie folgt lautet:
%Vor%während das zweite Paar Ihnen ein Paar Ergebnismengen wie folgt zurückgibt:
%Vor%und
%Vor%Jeder Ansatz gibt die Daten auf andere Weise zurück. In diesem einfachen Beispiel wird die Wiederholung des Buchtitels nicht von Bedeutung sein, aber wenn Sie anstelle des Titels das erste Kapitel (sagen wir) zurückgeben würden, wäre dies weniger effizient, da es viele wiederholte Daten geben würde. Während der zweite Vorgang in der Datenbank länger dauern kann, ist es beim Senden dieser Daten über das Netzwerk möglicherweise schneller und effizienter.
Sie müssen Ihre tatsächlichen Ergebnisse testen und sehen, welche am besten funktioniert.
Tags und Links sql mysql database join query-optimization