Frage

Ich erstelle eine PHP-Seite mit von MySQL gesendeten Daten.

Ist es besser zu haben?

  • 1 SELECT Abfrage mit 4 Tabellenverknüpfungen, oder
  • 4 kleine SELECT Abfragen ohne Tabellenverknüpfung;Ich wähle aus einer ID aus

Welche ist schneller und was sind die Vor- und Nachteile der einzelnen Methoden?Ich brauche nur eine Zeile von jeder Tabelle.

War es hilfreich?

Lösung

Sie sollten ein Profilierungswerkzeug ausführen, wenn Sie wirklich besorgt sind, denn es hängt von vielen Dingen, und es kann es besser in der Regel variieren, aber weniger Abfragen erstellt werden und weniger Umläufe in die Datenbank zu haben.

Achten Sie darauf, die Dinge auch filtern, wie Sie können Ihre wo und kommen auf Klauseln verwenden.

Aber ehrlich gesagt, es in der Regel keine Rolle, da Sie vermutlich nicht alle getroffen werde, dass hart im Vergleich zu dem, was die Datenbank tun, es sei denn, so Optimierung ist Ihre spec Sie sollten es nicht zu früh tun und was einfachste.

Andere Tipps

Wenn Sie statt mehrere Abfragen JOIN, können Sie die Datenbank ihre Optimierungen anzuwenden. Sie sind das Abrufen auch möglicherweise Zeilen, die Sie nicht brauchen (wenn Sie eine innere Verknüpfung mit mehrer wählt ersetzen sind), die den Netzwerkverkehr zwischen Ihrem App-Server und Datenbank-Server erhöht. Auch wenn sie auf dem gleichen Feld sind, das zählt.

Im Allgemeinen ist es besser, eine SELECT-Anweisung haben. Einer der Hauptgründe, Datenbanken zu haben ist, dass sie schnell auf die Verarbeitung von Informationen sind, insbesondere wenn sie in das Format der Abfrage ist.

Wenn es irgendeinen Nachteil dieses Ansatzes ist es, dass es einige Arten der Analyse, die Sie mit einem großen SELECT-Anweisung nicht tun kann. RDBMS-Puristen werden darauf bestehen, dass dies ein Datenbank-Design-Problem, in dem Fall, dass Sie zurück zu meinem ursprünglichen Vorschlag.

Es könnte davon abhängen, was Sie mit den Daten zu tun, nachdem Sie es aus der DB holen. Wenn Sie jede der vier Ergebnisse unabhängig verwenden, dann wäre es logisch und klar vier separate SELECT-Anweisungen haben. Auf der anderen Seite, wenn Sie zusammen alle Daten verwenden, wie eine einheitliche Zeile in einer Tabelle oder etwas zu schaffen, dann würde ich mit dem einzigen SELECT gehen und schließt sich.

Ich habe ein bisschen von PHP / MySQL Arbeit geleistet, und ich finde, dass auch für Abfragen auf große Tabellen mit Tonnen von Joins, die Datenbank ist ziemlich gut bei der Optimierung - wenn Sie Smart-Indizes haben. Also, wenn Sie über die Leistung ernsthaft beginnen Lesen auf Query-Optimierung und Indizierung .

Ich würde sagen, 1 Abfrage mit der Verbindung. Auf diese Weise müssen Sie den Server nur einmal getroffen. Und wenn Sie Ihre Tabellen mit Indizes verbunden sind, sollte schnell sein.

Nun unter Oracle würden Sie die Vorteile der Query-Caching nehmen wollen, und wenn Sie viele kleine Fragen haben Sie in Ihrer sequentiellen Verarbeitung tun, es würde saugen, wenn die letzte Abfrage die erste aus dem Cache geschoben ... gerade rechtzeitig für Sie Schleife um und führt diese erste Abfrage erneut (mit unterschiedlichen Parameterwerten natürlich) auf dem nächsten Durchgang.

Wir haben den Aufbau einer XML-Ausgabedatei Verfahren unter Verwendung von Java gespeichert und fand auf jeden Fall die Umlaufzeiten für jede einzelne Abfrage uns am Leben fraßen. Wir fanden es war viel schneller, um alle Daten in möglichst wenigen Abfragen wie möglich zu bekommen, dann diese Werte in der XML-DOM-Stecker je nach Bedarf.

Der einzige Nachteil ist, dass der Java-Code ein bisschen weniger elegant war, da die Daten holen war jetzt entfernt von seiner Verwendung. Aber wir hatten eine große, komplexe XML-Datei in so nahe bei Null wie möglich zu erzeugen, so dass wir für die Geschwindigkeit optimieren.

Seien Sie vorsichtig, wenn sie mit einer Merge-Tabelle zu tun jedoch. Es ist meine Erfahrung, dass, obwohl eine einzige beitreten kann in den meisten Situationen gut sein, wenn merge Tabellen beteiligt sind Sie in seltsame Situationen führen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top