MySQLプリコンパイル機能
1. プリコンパイルの利点
誰もが通常、プリコンパイル機能を持つ JDBC の PreparedStatement インターフェイスを使用したことがあります。プリコンパイル機能とは何ですか?その利点は何ですか?
クライアントがサーバーにSQLステートメントを送信するとき、サーバーは常にSQLステートメントの構文形式が正しいかどうかを検証し、SQLステートメントを実行可能な関数にコンパイルし、最後にSQLステートメントを実行する必要があります。構文の検証とコンパイルに費やされる時間は、SQL ステートメントの実行に費やされる時間よりも長くなる可能性があります。
複数のinsert文を実行する必要があるが、挿入される値だけが毎回異なる場合、MySQLサーバーも毎回構文形式を検証してSQL文をコンパイルする必要があり、時間がかかりすぎます。プリコンパイル機能を使用すると、SQL 文の構文チェックとコンパイルが 1 回だけ行われるため、効率が高くなります。
2. MySQL はプリコンパイルを実行します
MySQL は 3 つのステップでプリコンパイルを実行します:
プリコンパイルされたステートメントを実行します。例: prepare myfun from 'select * from t_book where bid=?'
例: set @str='b1'
ステートメントを実行します。例: @str
を使用してmyfunを実行します。myfunを再度実行する必要がある場合、最初のステップは不要になります。ステートメントを再度コンパイルするには:
変数を設定します。例: set @str='b2'
ステートメントを実行します。例: @str
を使用して myfun を実行します。 MySQL ログ:
3. Statement を使用してプリコンパイルを実行します
Statement を使用してプリコンパイルを実行するには、上記の SQL ステートメントを 1 回実行します。
Connection con = JdbcUtils.getConnection(); Statement stmt = con.createStatement(); stmt.executeUpdate("prepare myfun from 'select * from t_book where bid=?'"); stmt.executeUpdate("set @str='b1'"); ResultSet rs = stmt.executeQuery("execute myfun using @str");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("set @str='b2'"); rs = stmt.executeQuery("execute myfun using @str");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/JIn バージョンは5.0.5 以降、プリコンパイル機能はデフォルトでは有効になっていません)。
例: jdbc:mysql://localhost:3306/test?useServerPrepStmts=true
これにより、mysql ドライバーが最初にプリコンパイルのために SQL ステートメントをサーバーに送信し、次にパラメーターのみをサーバーに送信することが保証されます。 executeQuery()サーバーを実行するとき。
Connection con = JdbcUtils.getConnection(); String sql = "select * from t_book where bid=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, "b1"); ResultSet 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 回行われるという現象が引き続き発生します。 。コンパイルされた関数のキーをキャッシュしたい場合は、cachePrepStmts パラメーターを true に設定する必要があります。例:
jdbc:mysql://localhost:3306/test?useServerPrepStmts=true&cachePrepStmts=true
Connection con = JdbcUtils.getConnection(); String sql = "select * from t_book where bid=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, "b1"); ResultSet 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 バッチ処理もパラメータを通じて開く必要があります: rewriteBatchedStatements=true
以上がMySQLプリコンパイル機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

GateToken(GT)通貨とは何ですか? GT (GateToken) は、GateChain チェーンのネイティブ資産であり、Gate.io の公式プラットフォーム通貨です。 GT コインの価値は、Gate.io および GateChain エコロジーの発展と密接に関連しています。ゲートチェーンとは何ですか? GateChain は 2018 年に誕生し、Gate.io によって開始された新世代の高性能パブリック チェーンです。 GateChain は、ユーザーのオンチェーン資産のセキュリティを保護し、便利な分散トランザクション サービスを提供することに重点を置いています。 GateChain の目標は、エンタープライズレベルの安全で効率的な分散型デジタル資産ストレージ、配信、およびトランザクションのエコシステムを構築することです。ゲートチェーンにはオリジナルがあります
