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 Erklärung der MySQL Master-Slave-Inkonsistenz und Lösungen

1. MySQL Master-Slave-Asynchronität 1.1 Netzwerkv...

So implementieren Sie Leerzeichen in Taobao mit CSS3

Machen Sie einen leeren Bereich für Taobao: Wenn ...

So gestalten Sie das Frontend einer Website elegant und attraktiv für Benutzer

Das Temperament einer Web-Frontend-Website ist ein...

Detaillierte Erklärung der neuen Array-Methoden in JavaScript es6

Inhaltsverzeichnis 1. fürJedes() 2. arr.filter() ...

Ausführliche Erläuterung des Prinzips des MySQL Innodb-Index

Einführung Wenn ich zurückblicke, sagte der Lehre...

Lösungen für Probleme bei der Verwendung von addRoutes in Vue-Projekten

Inhaltsverzeichnis Vorwort 1. 404 Seite 1. Ursach...

Implementierungsbeispiel für Scan-Code-Zahlung im Vue-Projekt (mit Demo)

Inhaltsverzeichnis Nachfragehintergrund Gedankena...

Delegieren von Berechtigungen in Linux mit Sudo

Einführung in die Sudo-Autoritätsdelegierung su-S...

XHTML-Tutorial: Der Unterschied zwischen Transitional und Strict

Tatsächlich ist XHTML 1.0 in zwei Typen unterteil...

Lebenszyklus und Hook-Funktionen in Vue

Inhaltsverzeichnis 1. Was ist der Lebenszyklus 2....

Vue setzt die Daten auf ihren ursprünglichen Zustand zurück

In einigen Fällen müssen die Daten in den Daten w...