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) サービスをインストールおよびアンインストールする詳細な手順
jsvc の紹介実稼働環境では、Tomcat はデーモン モードで実行する必要があります。Tomc...
VueはPCカメラを呼び出してリアルタイムで写真を撮影します。参考までに、具体的な内容は次のとおりで...
letter-spacing プロパティ: 文字間のスペース (文字間隔) を増減します。このプロ...
[LeetCode] 176. 2番目に高い給与従業員テーブルから 2 番目に高い給与を取得する ...
<br />質問: Word のコンテンツを Web サイトのエディターに直接コピーする...
Go は、シンプルで信頼性が高く、効率的なソフトウェアを簡単に構築できるオープンソース プログラミン...
1. Centosイメージを使用してローカルのyumソースをビルドするCentOS をインストール...
今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...
1. Apache Tomcat 公式サイトから Tomcat 圧縮パッケージをダウンロードします。...
序文最近、プロジェクトで :first-child を使用したのですが、すぐに思いつきました。これは...
目次アレイ重複排除1 2層forループ(バブルソートの2層ループ記述に類似) 2 ループとインデック...
この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...
目次1. リバースプロキシの準備1. LinuxシステムにTomcatをインストールする2. Tom...
昨日、円形のプログレスバー (Vue 円形プログレスバーを参照してください) についてブログを書きま...
1. nginx はなぜ gzip を使用するのですか? 1. 圧縮の役割:ページがgzipで圧縮さ...