Gibt es einen Leistungsgewinn, wenn Daten mit gespeicherten Prozeduren verarbeitet werden, anstatt sie nach dem Abrufen in Funktionen einzuspeisen?

8

Titel fasst es zusammen. Ich bin mit PHP einigermaßen gut dran und kann es mit Werten, die aus MySQL stammen, genau so machen, wie ich es brauche. Um mein Wissen zu erweitern, habe ich mich gefragt, ob es vielleicht eine effizientere Technik in der PHP wäre langfristig. Sind sie gleichwertig (weil sie am Ende ungefähr gleich viel verarbeitet werden), oder gibt es Fälle, in denen einer einen deutlichen Vorteil gegenüber dem anderen darstellt?

Kaji
quelle
3
Gute Frage und langjähriger Diskussionspunkt. Wie viel wird auf der APP-Seite sein, wie viel wird auf der DB-Seite getan. Möglicherweise möchten Sie es in "RDBMS to APP-Layer" umformulieren, da die Frage für alle Arten von DB- und APP-Interaktionen gilt.
Sebastian Roth
2
Ich möchte diese Frage so sehr ergänzen, aber ich habe nichts Interessantes hinzuzufügen. Dies ist eine großartige Frage, und es würde mir nichts
ausmachen
Ich habe tatsächlich darüber nachgedacht, diese Frage zu stellen, ob sie hier für Datenbankadministratoren zum Thema geworden wäre. Ich habe nach etwas völlig anderem gesucht und dieses zufällig gefunden. Also +1 für das Lesen meiner Gedanken
Derek Downey

Antworten:

6

Es hängt sehr davon ab, was Sie mit den Datensätzen machen und wie Ihre Netzwerkarchitektur aussieht. Wenn die gespeicherte Prozedur beispielsweise die Gesamtmenge der von MySQL an PHP übertragenen Daten verringert und Sie eine relativ langsame Verbindung zwischen der PHP-Instanz und der Datenbank haben, kann Ihnen ein SP sicherlich helfen.

Ich würde empfehlen, dass Sie mit einigen der "schwereren" Manipulationen beginnen, die Sie an Ihren Daten auf der PHP-Seite vornehmen, sehen, was Sie als SP schreiben können, und diese dann vergleichen.

TML
quelle
5

Ein Punkt für mehr Verarbeitung in der Datenbank ist, dass die Datenbank nicht optimieren kann, was sie nicht sieht. Wenn Sie beispielsweise eine Eigenschaft einer persistierten Klasse für alle Instanzen auf einen konstanten Wert setzen, ist die Leistung in der Datenbankebene definitiv besser.

Ein Punkt dagegen ist, dass Datenbanken gut für satzbasierte Operationen sind, aber nicht so gut für zeilenbasierte Operationen. Beispielsweise kann die Konvertierung einer UTC-Zeit in eine Ortszeit basierend auf einer pro Zeile variierenden Zeitzone in der Datenbank möglicherweise nicht so gut funktionieren wie in der App-Schicht.

Larry Coleman
quelle
Ein ausgezeichneter Punkt über den Optimierer.
TML
2

Wenn das Ergebnis eine Aggregation ist (Summe, Durchschnitt, Anzahl), ist es normalerweise viel schneller, auf dem Datenbankserver berechnet zu werden, indem unnötige Kommunikation zwischen dem Server und dem Client vermieden wird. Das Ordnen und Gruppieren kann auch von Indizes profitieren und den Rechenaufwand verringern.

Razvan Popovici
quelle