Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mehrere Abfragen VS Stored Procedure

Jede Empfehlung hängt teilweise davon ab, wo sich das Skript befindet, das die Abfragen ausführt. Wenn sich das Skript, das die Abfragen ausführt, auf demselben Server wie die MySQL-Instanz befindet, werden Sie keinen großen Unterschied feststellen, aber es gibt immer noch einen kleinen Overhead bei der Ausführung von 200.000 Abfragen im Vergleich zu 1 gespeicherten Prozedur.

Mein Rat wäre in jedem Fall, es als gespeicherte Prozedur zu erstellen. Sie würden vielleicht ein paar Prozeduren brauchen.

  1. Ein Verfahren, das die 10 Anweisungen, die Sie pro Vorgang ausführen, zu einem Aufruf kombiniert
  2. Eine Prozedur, die mit einem CURSOR über eine Argumenttabelle iterieren kann in Verfahren 1 einzuspeisen

Ihr Prozess wäre

  1. Füllen Sie eine Tabelle mit Argumenten, die von Prozedur 2 in Prozedur 1 eingespeist würden
  2. Führen Sie Vorgang 2 aus

Dies würde zu Leistungsvorteilen führen, da keine 20000*10-malige Verbindung zum MySQL-Server erforderlich ist. Während der Overhead pro Anfrage gering sein mag, summieren sich Millisekunden. Selbst wenn die Einsparung 0,1 ms pro Anfrage beträgt, sind das immer noch 20 Sekunden eingespart.

Eine andere Option könnte darin bestehen, Ihre Anforderungen so zu ändern, dass alle 20.000 Datenoperationen gleichzeitig ausgeführt werden (falls möglich), indem Sie Ihre 10 Abfragen anpassen, um Daten aus der oben genannten Datenbanktabelle abzurufen. Der Schlüssel zu all dem besteht darin, die Argumente in einer einzigen Stapeleinfügung zu laden und dann Anweisungen auf dem MySQL-Server innerhalb einer Prozedur zu verwenden, um sie ohne weitere Roundtrips zu verarbeiten.