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:
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:
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.nächster()) { 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.nächster()) { 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 zur Vorkompilierung verwendet werden. Dazu muss der Parameter useServerPrepStmts=true in der URL angegeben werden (MySQL Server-Versionen vor 4.1 unterstützen die Vorkompilierung nicht und Connector/J-Versionen nach 5.0.5 aktivieren die Vorkompilierung standardmäßig nicht). 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.nächster()) { 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.nächster()) { 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.nächster()) { 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 Parameter aktiviert werden:
Oben finden Sie ausführliche Informationen zum Verständnis der MySQL-Vorkompilierung in einem Artikel. Weitere Informationen zur MySQL-Vorkompilierung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der Kernkonzepte und Fälle von webpack-dev-server
Im vorherigen Artikel wurde der Docker-Dienst ins...
Inhaltsverzeichnis 1. Arrays zusammenführen 2. Ar...
CentOS8 wurde vor ein paar Tagen veröffentlicht. ...
Dieser Artikel installiert die Google-Eingabemeth...
1. PC-Reset Initialisierung im PC-Stil /* normali...
Erste Methode : CSS Code: Code kopieren Der Code l...
Inhaltsverzeichnis rahmen Erstklassiges Fehlerrep...
Ergebnisse erzielen Umsetzungsideen Der Schmelzef...
1.1 Kopieren Sie das Nginx-Installationspaket und...
Überprüfen Sie, ob Ihr CUDA installiert ist Geben...
Dieser Artikel beschreibt, wie Sie den Chrome-Bro...
Befehl: mysqlhotcopy Dieser Befehl sperrt die Tab...
1. Einführung in mysqldump mysqldump ist ein logi...
1. Gestricheltes Feld, wenn die Abbrechen-Schaltfl...
Was <fieldset> und <legend> betrifft,...