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) サービスをインストールおよびアンインストールする詳細な手順
方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...
1. はじめにデータベース内のデータ量が一定レベルに達すると、システムパフォーマンスのボトルネックを...
書き方1: sas_order_supply_month_pay セットを更新 RECEIVE_TI...
導入EXISTS は、サブクエリが少なくとも 1 行のデータを返すかどうかを確認するために使用されま...
xshellを使用してLinuxに接続する利点Windows環境でLinuxを直接操作できるインター...
序文Reduce は ES5 で追加された新しい従来の配列メソッドの 1 つです。forEach、f...
オプションに属性 selected = "selected" を追加すると、それ...
目次背景1. 思考分析2. ページ構成2.1 HTML レイヤー2.2 CSS レイヤー2.3 JS...
1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...
新しいバージョンの設定インターフェースを作る際に、vueフレームワークを使用して実装しました。ページ...
序文この記事では、DBA がいないチームが参考にできるように、MySQL の一般的な使用に関するヒン...
目次1. 怠惰な2.トリム3.番号4.停止5. キャプチャ6.自分7.一度8.予防する9.ネイティブ...
成果を達成する 実装コードhtml <div class="wrap"&g...
この記事では主に、CSS3 LESS で長いテキストの影を実装する方法を紹介し、皆さんと共有します。...
HTML と CSS を含む JD.com のホームページの静的ページ効果を 3 日間で完成させます...