Spezifische Verwendung der MySQL-Vorbereitungsvorverarbeitung

Spezifische Verwendung der MySQL-Vorbereitungsvorverarbeitung

Die Bedeutung der MySQL PREPARE-Vorverarbeitungstechnologie besteht darin, dass sie den Druck auf den Server verringert.

Das heißt, in den meisten Fällen kann es vorkommen, dass eine bestimmte SQL-Anweisung für eine bestimmte Anforderung mehrfach aufgerufen und ausgeführt wird oder nur einzelne Werte bei jeder Ausführung unterschiedlich sind.
Zum Beispiel:

  • Der Wert der WHERE-Klausel von SELECT ist unterschiedlich;
  • Die Werte der SET-Klausel von UPDATE sind unterschiedlich;
  • Die VALUES-Werte von INSERT sind unterschiedlich;
    Wenn die oben genannte lexikalische semantische Analyse, Anweisungsoptimierung, Ausführungsplanformulierung usw. jedes Mal erforderlich sind, wird die Effizienz erheblich reduziert.

1. Vorverarbeitung

MySQL bietet Unterstützung für serverseitig vorbereitete Anweisungen, die als Vorverarbeitung bezeichnet wird.

Diese Unterstützung nutzt ein effizientes Client/Server-Binärprotokoll. Die Verwendung vorbereiteter Anweisungen mit Platzhaltern für Parameterwerte bietet die folgenden Vorteile:

  • Reduzieren Sie den Aufwand beim Parsen von Anweisungen bei jeder Ausführung. Typischerweise verarbeiten Datenbankanwendungen eine große Anzahl nahezu identischer Anweisungen und ändern nur Literal- oder Variablenwerte in Klauseln wie WHERE für Abfragen und Löschungen, SET für Aktualisierungen und VALUES für Einfügungen.
  • Verhindern Sie SQL-Injection-Angriffe. Parameterwerte können nicht maskierte SQL-Anführungszeichen und Trennzeichen enthalten.

Vorverarbeitungsschnittstelle

1. Vorbereitete Anweisungen in Anwendungen Sie können serverseitig vorbereitete Anweisungen über Client-Programmierschnittstellen verwenden, einschließlich der MySQL C API-Clientbibliothek für C-Programme, MySQL Connector/J für Java-Programme und MySQL. NET-Technologieprogramm MySQL Connector/NET. Beispielsweise stellt die C-API eine Reihe von Funktionsaufrufen bereit, die ihre vorbereitete Anweisungs-API bilden.

2. Vorbereitete Anweisungen in SQL-Skripten Es gibt auch eine alternative SQL-Schnittstelle für vorbereitete Anweisungen. Es ist jedoch keine Programmierung erforderlich; es ist direkt auf SQL-Ebene verfügbar und Sie können es in jedem Programm verwenden, das SQL-Anweisungen zur Ausführung an den Server senden kann, z. B. das MySQL-Clientprogramm.

2. Vorbehandlungsanwendungsmethode

Die SQL-Syntax für vorbereitete Anweisungen basiert auf drei SQL-Anweisungen:

  • Die PREPARE-Anweisung bereitet die Ausführung vor.
  • EXECUTE führt eine vorbereitete Anweisung aus.
  • DEALLOCATE PREPARE gibt eine vorbereitete Anweisung frei.

A. Beispiel:

Vorbereitete Anweisungen können nicht sitzungsübergreifend verwendet werden:

mysql>CREATE TABLE `t1` (
  `id` int NICHT NULL,
   NAME varchar(20),
SCHLÜSSEL `idx_id` (`id`)
) ENGINE=InnoDB;
 
mysql>INSERT INTO t1(id,name) Werte(1,'A'),(2,'B'),(3,'C'),(4,'D'),(5,'E'),(6,'F');
 
#Setzen Sie die vorbereitete Anweisung mysql>PREPARE stmt1 FROM 'SELECT * FROM t1 WHERE a=? ';
 
#Setzen Sie die Übertragungsvariable mysql>SET @a = 8;
 
#Anweisung ausführenmysql>EXECUTE stmt1 USING @a;
 
# Geben Sie die vorbereitete Anweisung frei mysql>DEALLOCATE PREPAR stmt1;

B. Vorverarbeitung zur Nachverfolgung von Änderungen in Ausführungsplänen

Durch Beobachtung der Änderungen des Statusindikators Select_scan (Anzahl der ausgeführten Suchanfragen für die gesamte Tabelle) können Sie feststellen, ob das Datenvolumen beeinträchtigt ist.

bild.jpg

Der Ausführungsplan der vorverarbeiteten SQL-Anweisung ändert sich, wenn sich die Datenmenge ändert.

C. Die gespeicherte Prozedur enthält Vorverarbeitung

Vorbereitete Anweisungen: Wenn Sie eine vorbereitete Anweisung innerhalb einer gespeicherten Routine erstellen, wird sie nicht freigegeben, wenn die gespeicherte Routine endet.

TRENNUNGSZEICHEN //
 
VERFAHREN LÖSCHEN, WENN proc_prepared EXISTIERT;
PROZEDUR ERSTELLEN proc_prepared()
BEGINNEN
DEKLARESIEREN eines INT;
Erklären Sie, dass ich INT;
VORBEREITEN von stmt1 AUS 'SELECT * AUS t1 WHERE id>? ';
Setzen Sie @a = 5;
Führen Sie stmt1 unter Verwendung von @a aus;
ENDE //
 
TRENNUNGSZEICHEN ;
 
rufen Sie proc_prepared() auf;
Nach der gespeicherten Prozedur wird die vorbereitete Anweisung separat aufgerufen und der Ergebnisset zurückgegeben: Dies zeigt an, dass die Vorverarbeitung SET @a = 5; nicht zerstört hat.
Führen Sie stmt1 unter Verwendung von @a aus;
+----+------+
| Ich würde | NAME |
+----+------+
| 6 | F |
. . .

Nach der gespeicherten Prozedur wird die vorbereitete Anweisung separat aufgerufen und der Ergebnissatz zurückgegeben: Dies bedeutet, dass die Vorverarbeitung nicht zerstört wird

SET @a = 5; EXECUTE stmt1 USING @a; +----+------+ | id | NAME | +----+------+ | 6 | F | 。。。

D. Anzeigen der Kosten für das Parsen von Anweisungen über das Profil

Durch die Profilierung der Ausführungszeit verschiedener Anweisungen liegt die zum Parsen der Anweisungen benötigte Zeit im Bereich von 0,01 Sekunden. Kann ignoriert werden.
Daher konnten bislang keine offensichtlichen Vorteile der Vorbehandlung festgestellt werden.

bild.jpg

3. Zusammenfassung

Die anfängliche Rolle der Vorkompilierung:

  • Steigern Sie die Effizienz: Führen Sie Analysen, Prüfungen und Zusammenstellungen vorab durch.
  • Verbesserung der Sicherheit: Verhinderung von SQL-Injection

Einschränkungen und praktische Auswirkungen:

  • Da die Vorverarbeitung auf die Sitzungsebene beschränkt ist, kann sie ihren wahren Wert derzeit nicht wiedergeben. Da die MySQL GA-Version nicht über das Konzept eines Thread-Pools verfügt, ist jede Verbindung jede Sitzung
  • Der Aufwand für die Analyse kompilierter Anweisungen ist für die MySQL-Umgebung grundsätzlich vernachlässigbar.
  • Mit der Datenmenge ändert sich auch der Ausführungsplan.

Gemessen an seinen Einschränkungen und tatsächlichen Auswirkungen funktioniert es derzeit nicht wie es sollte. Nicht für den Einsatz in einer Schallfeldumgebung geeignet.

Dies ist das Ende dieses Artikels über die spezifische Verwendung der MySQL-Vorverarbeitung. Weitere relevante Inhalte zur MySQL-Vorverarbeitung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Tutorial zur Verwendung von Prepare-, Execute- und Deallocate-Anweisungen in MySQL
  • MySQL-Vorbereitungsnutzung und Fehleranalyseprozess

<<:  Durch das flexible Layout können Unterelemente ihre eigene Höhe beibehalten

>>:  Einige Möglichkeiten zur Lösung des Problems des in Jenkins integrierten Docker-Plugins

Artikel empfehlen

Detaillierte Erläuterung der bidirektionalen Bindung von Vue

Inhaltsverzeichnis 1. Zwei-Wege-Bindung 2. Wird d...

CSS3 realisiert den grafischen Fallanimationseffekt

Sehen Sie zuerst den Effekt Implementierungscode ...

Einige Punkte, auf die wir beim Entwurf einer Webseite achten sollten

Webdesign: Je nach persönlichen Vorlieben und Inha...

Warum sollte CSS im Head-Tag platziert werden?

Denken Sie darüber nach: Warum sollte css im head...

Detailliertes Tutorial zur Installation von Protobuf 3 unter Ubuntu

Wann ist die Installation durchzuführen? Wenn Sie...

Tutorial zur mobilen Entwicklung: Zusammenfassung der Pixelanzeigeprobleme

Vorwort Ich bin davon überzeugt, dass bei der Ent...

Mysql8.0 verwendet Fensterfunktionen, um Sortierprobleme zu lösen

Einführung in MySQL-Fensterfunktionen MySQL unter...

Zusammenfassung mehrerer häufig verwendeter CentOS7-Images basierend auf Docker

Inhaltsverzeichnis 1 Docker installieren 2 Konfig...

Erfahren Sie schnell, wie Sie mit der Vuex-Statusverwaltung in Vue3.0 beginnen

Vuex ist ein speziell für Vue.js-Anwendungen entw...

Bootstrap 3.0 Studiennotizen Grid-System-Fall

Vorwort Im vorherigen Artikel haben wir hauptsäch...