1. プリコンパイルの利点 私たちは皆、プリコンパイル機能を備えた JDBC の PreparedStatement インターフェイスを使用したことがあります。プリコンパイル機能とは何ですか?それのメリットは何ですか? クライアントが SQL ステートメントをサーバーに送信すると、サーバーは常に SQL ステートメントの構文が正しいかどうかを確認し、SQL ステートメントを実行可能な関数にコンパイルし、最後に SQL ステートメントを実行する必要があります。構文チェックとコンパイルにかかる時間は、SQL ステートメントの実行にかかる時間よりも長くなる可能性があります。 複数の挿入文を実行する必要があるが、挿入される値が毎回異なる場合、MySQL サーバーは SQL 文の構文形式も確認して毎回コンパイルする必要があり、時間がかかりすぎます。プリコンパイル機能を使用すると、SQL 文は一度だけ構文チェックされ、コンパイルされるため、効率が高くなります。 2. MySQLはプリコンパイルを実行する MySQL は、次の 3 つのステップでプリコンパイルを実行します。
myfun を再度実行する必要がある場合、最初の手順を実行する必要はありません。つまり、ステートメントを再度コンパイルする必要はありません。
MySQL ログを表示すると、実行プロセスを確認できます。 3. ステートメントを使用してプリコンパイルを実行する ステートメントを使用してプリコンパイルを実行すると、上記の SQL ステートメントが 1 回実行されます。 接続 con = JdbcUtils.getConnection(); ステートメント stmt = con.createStatement(); stmt.executeUpdate("'select * from t_book where bid=?' から myfun を準備します"); stmt.executeUpdate("@str='b1' を設定"); ResultSet rs = stmt.executeQuery("@str を使用して myfun を実行します"); while(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("@str='b2' を設定"); rs = stmt.executeQuery("@str を使用して myfun を実行します"); while(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.close(); stmt.close(); con.close(); 4. useServerPrepStmtsパラメータ デフォルトでは、PreparedStatement はプリコンパイルに使用できません。URL に useServerPrepStmts=true パラメータを指定する必要があります (MySQL Server 4.1 より前のバージョンではプリコンパイルがサポートされておらず、Connector/J 5.0.5 以降のバージョンではデフォルトでプリコンパイルが有効になっていません)。 例: jdbc:mysql://localhost:3306/test?useServerPrepStmts=true これにより、MySQL ドライバーは最初に SQL ステートメントをプリコンパイルのためにサーバーに送信し、次に executeQuery() を実行するときにパラメーターのみをサーバーに送信するようになります。 接続 con = JdbcUtils.getConnection(); 文字列 sql = "select * from t_book where bid=?"; 準備されたステートメント pstmt = con.prepareStatement(sql); pstmt.setString(1, "b1"); 結果セット rs = pstmt.executeQuery(); while(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(); while(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.close(); pstmt.close(); con.close(); 5. cachePrepStmtsパラメータ 異なる PreparedStatement オブジェクトを使用して同じ SQL ステートメントを実行すると、ステートメントは 2 回コンパイルされます。これは、ドライバーがコンパイルされた関数キーをキャッシュしないため、2 回目のコンパイルが発生するためです。コンパイルされた関数のキーをキャッシュする場合は、cachePrepStmts パラメータを true に設定します。例えば: jdbc:mysql://localhost:3306/test?useServerPrepStmts=true&cachePrepStmts=true 接続 con = JdbcUtils.getConnection(); 文字列 sql = "select * from t_book where bid=?"; 準備されたステートメント pstmt = con.prepareStatement(sql); pstmt.setString(1, "b1"); 結果セット rs = pstmt.executeQuery(); while(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(); while(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.close(); pstmt.close(); con.close(); 6. バッチ処理をオンにする MySQL バッチ処理もパラメータを通じて有効にする必要があります。
上記は、MySQL プリコンパイルを 1 つの記事で理解するための詳細な内容です。MySQL プリコンパイルの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: webpack-dev-server のコア概念とケースの詳細な説明
>>: CentOS 7 で Apache (httpd) サービスをインストールおよびアンインストールする詳細な手順
まず、一連の概念を理解しましょう。nginx リバース プロキシとは何でしょうか?リバース プロキシ...
目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...
環境サーバー: centos7クライアント: ウィンドウCentos7 に docker+gitla...
Nginx の最適化 - バージョン番号と Web ページのキャッシュ時間を非表示にするバージョン番...
Centos7 の起動プロセス: 1.post(電源投入時のセルフテスト) 電源投入時のセルフテスト...
サーバーでは、データベースにすばやくログインするために、通常は mysql -hhost -uuse...
スタックフローからの回答:単に<br>だけで十分です。その他の形式は、XHTML との互...
1. MySQLの一般的な接続INNER JOIN (内部結合、または等価結合): 2 つのテーブ...
コア資産管理プロジェクトでは、el-transfer にドラッグ アンド ドロップによる並べ替えと、...
Safari (Technology Preview 106) および Firefox (バージョン...
メモ: とにかく体験してみましょう。記録: NO.209この例の環境:仮想マシン: vmwareオペ...
ユーザーエクスペリエンスと使いやすさを向上させるために、入力ボックスなど、Web ページでユーザーが...
データベースのパフォーマンスに関する話面接では、「データベースにどのくらい精通していますか?」など、...
1 背景JDK1.8-u181とTomcat8.5.53がインストールされました。インストール後、環...
Linuxを学び始めるときは、まずLinuxの標準ディレクトリ構造を理解する必要があります。 / r...