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

my.cnf-Parameterkonfiguration zur Optimierung der InnoDB-Engine-Leistung

Ich habe im Internet unzählige my.cnf-Konfigurati...

So verleihen Sie einer Website ein höheres und ansprechenderes Aussehen

„Wie lässt man eine Website hochwertig aussehen? ...

HTML/CSS (der erste Leitfaden, den Anfänger unbedingt lesen sollten)

1. Die Bedeutung von Webstandards verstehen - War...

Zusammenfassung der Kompatibilitätsprobleme beim Flex-Layout

1. W3C-Versionen von Flex Version 2009 Flag: Anze...

Beispielcode zur Implementierung eines 3D-Text-Hover-Effekts mit CSS3

In diesem Artikel wird der Beispielcode von CSS3 ...

Ursachen und Lösungen für die Front-End-Ausnahme 502 Bad Gateway

Inhaltsverzeichnis 502 Bad Gateway Fehlerbildung ...

xtrabackup MySQL-Datenbank sichern und wiederherstellen

Aufgrund einiger seiner eigenen Merkmale (Sperren...

Zusammenfassung verschiedener Methoden zur JS-Datentyperkennung

Inhaltsverzeichnis Hintergrund Welche Methoden gi...

Eine kurze Analyse der Unterschiede zwischen „:=“ und „=“ in MySQL

= Nur beim Setzen und Aktualisieren wirkt es wie ...