Detaillierte Erklärung der MySQL-Vorkompilierungsfunktion

Detaillierte Erklärung der MySQL-Vorkompilierungsfunktion

In diesem Artikel wird die MySQL-Vorkompilierungsfunktion zu Ihrer Information vorgestellt. Der spezifische Inhalt ist wie folgt

1. Vorteile der Vorkompilierung

Wir haben alle die PreparedStatement-Schnittstelle in JDBC verwendet, die über eine Vorkompilierungsfunktion verfügt. Was ist die Vorkompilierungsfunktion? Was sind die Vorteile davon?
Wenn ein Client eine SQL-Anweisung an einen Server sendet, muss der Server immer überprüfen, ob die Syntax der SQL-Anweisung korrekt ist, dann die SQL-Anweisung in eine ausführbare Funktion kompilieren und schließlich die SQL-Anweisung ausführen. Der Zeitaufwand für die Syntaxprüfung und Kompilierung kann größer sein als die Zeit, die für die Ausführung der SQL-Anweisung benötigt wird.
Wenn wir mehrere Einfügeanweisungen ausführen müssen, die jedes Mal eingefügten Werte jedoch unterschiedlich sind, muss der MySQL-Server auch das Syntaxformat der SQL-Anweisung überprüfen und sie jedes Mal kompilieren, was zu viel Zeit verschwendet. Wenn die Vorkompilierungsfunktion verwendet wird, wird die SQL-Anweisung nur einmal syntaktisch geprüft und kompiliert, sodass die Effizienz hoch ist.

2. MySQL führt eine Vorkompilierung durch

MySQL führt die Vorkompilierung in drei Schritten durch:
Führen Sie eine vorbereitete Anweisung aus, zum Beispiel: prepare myfun from 'select * from t_book where bid=?'
Legen Sie eine Variable fest, zum Beispiel: set @str='b1'
Führen Sie Anweisungen aus, zum Beispiel: execute myfun using @str
Wenn Sie myfun erneut ausführen müssen, müssen Sie den ersten Schritt nicht ausführen, d. h. Sie müssen die Anweisung nicht erneut kompilieren:
Legen Sie eine Variable fest, zum Beispiel: set @str='b2'
Führen Sie Anweisungen aus, zum Beispiel: execute myfun using @str
Sie können den Ausführungsprozess verfolgen, indem Sie das MySQL-Protokoll anzeigen:

3. Verwenden Sie die Anweisung, um die Vorkompilierung durchzuführen

Die Verwendung einer Anweisung zum Ausführen der Vorkompilierung bedeutet, dass die obige SQL-Anweisung einmal ausgeführt wird.

Verbindung con = JdbcUtils.getConnection();
Anweisung stmt = con.createStatement();
stmt.executeUpdate("bereite myfun aus 'select * from t_book where bid=?' vor");
stmt.executeUpdate("set @str='b1'");
ResultSet rs = stmt.executeQuery("führe myfun mit @str aus");
während(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

stmt.executeUpdate("set @str='b2'");
rs = stmt.executeQuery("führe myfun mit @str aus");

während(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.schließen();
stmt.schließen();
con.schließen();

4. useServerPrepStmts-Parameter

Standardmäßig kann PreparedStatement nicht vorkompiliert werden. Dies erfordert den Parameter useServerPrepStmts=true in der URL (MySQL Server

Versionen vor 4.1 unterstützen die Vorkompilierung nicht und Connector/J-Versionen nach 5.0.5 aktivieren die Vorkompilierung nicht standardmäßig.

Beispiel: jdbc:mysql://localhost:3306/test?useServerPrepStmts=true
Dadurch wird sichergestellt, dass der MySQL-Treiber zuerst die SQL-Anweisung zur Vorkompilierung an den Server sendet und dann beim Ausführen von executeQuery() nur die Parameter an den Server sendet.

Verbindung con = JdbcUtils.getConnection();
Zeichenfolge SQL = "Wählen Sie * aus t_book aus, wobei bid=?";
Vorbereitete Anweisung pstmt = con.prepareStatement(sql);

pstmt.setString(1, "b1");
Ergebnismenge rs = pstmt.executeQuery();
während(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

pstmt.setString(1, "b2");
rs = pstmt.executeQuery();
während(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.schließen();
pstmt.schließen();
con.schließen();

5. cachePrepStmts-Parameter

Wenn Sie verschiedene PreparedStatement-Objekte verwenden, um dieselbe SQL-Anweisung auszuführen, wird sie dennoch zweimal kompiliert. Dies liegt daran, dass der Treiber den kompilierten Funktionsschlüssel nicht zwischenspeichert, was zu einer sekundären Kompilierung führt. Wenn Sie den Schlüssel der kompilierten Funktion zwischenspeichern möchten, setzen Sie den Parameter cachePrepStmts auf true. Zum Beispiel:
jdbc:mysql://localhost:3306/test?useServerPrepStmts=true&cachePrepStmts=true

Verbindung con = JdbcUtils.getConnection();
Zeichenfolge SQL = "Wählen Sie * aus t_book aus, wobei bid=?";
Vorbereitete Anweisung pstmt = con.prepareStatement(sql);

pstmt.setString(1, "b1");
Ergebnismenge rs = pstmt.executeQuery();
während(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

pstmt = con.prepareStatement(sql);
pstmt.setString(1, "b2");
rs = pstmt.executeQuery();
während(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.schließen();
pstmt.schließen();
con.schließen();


6. Stapelverarbeitung aktivieren

Die MySQL-Stapelverarbeitung muss auch über den Parameter rewriteBatchedStatements=true aktiviert werden.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Tiefgreifendes Verständnis der MySQL-Vorverarbeitungskompilierung
  • Detailliertes Tutorial zum Kompilieren und Installieren von MySQL 8.0.20 aus dem Quellcode
  • Detailliertes Tutorial zum Kompilieren und Installieren von mysql8.0.29 in der LNMP-Umgebung von CentOS8
  • Detailliertes Tutorial zur Verwendung von cmake zum Kompilieren und Installieren von MySQL unter Linux
  • MySQL-Vorkompilierung in einem Artikel verstehen

<<:  Detailliertes Installationstutorial von Docker unter CentOS

>>:  So verwenden Sie http und WebSocket in CocosCreator

Artikel empfehlen

js zur Implementierung eines Web-Rechners

Wie erstelle ich mit HTML, CSS und JS einen einfa...

MySQL verwendet frm-Dateien und ibd-Dateien, um Tabellendaten wiederherzustellen

Inhaltsverzeichnis Einführung in FRM-Dateien und ...

Detaillierte Analyse des Blockierungsproblems von js und css

Inhaltsverzeichnis DOMContentLoaded und laden Was...

Schreiben und Verstehen von Pfeilfunktionen und diesem in JS

Inhaltsverzeichnis Vorwort 1. So schreiben Sie Fu...

CSS3 realisiert das Papierflugzeug aus der Kindheit

Heute werden wir Origami-Flugzeuge basteln (die A...

MySQL 5.7.18 Green Edition Download- und Installations-Tutorial

Dieser Artikel beschreibt den detaillierten Vorga...

MySQL 8.0.11 Installations-Tutorial unter Windows

Dieser Artikel zeichnet das Installationstutorial...

React implementiert doppelten Schieberegler zum Querschieben

In diesem Artikel wird der spezifische Code für R...

WeChat-Applet implementiert ein einfaches Würfelspiel

In diesem Artikel wird der spezifische Code des W...

Detaillierte Erklärung zur Verwendung der Clip-Path-Eigenschaft in CSS

Verwendung von Clip-Pfaden Polygon Der Wert setzt...

Detaillierte Schritte zur Verwendung von AES.js in Vue

Verwendung der AES-Verschlüsselung Verschlüsselun...

25 Tipps und Tricks zur Div+CSS-Programmierung

1. Das ul-Tag hat in Mozilla standardmäßig einen ...