SQL クエリのデータが多すぎてメモリ オーバーフローが発生した場合はどうすればよいですか?

(*-*)浩
リリース: 2019-10-28 09:53:49
オリジナル
7079 人が閲覧しました

通常、この状況は発生しませんが、保証はありません。この状況は時々発生します。解決策は次のとおりです:

SQL クエリのデータが多すぎてメモリ オーバーフローが発生した場合はどうすればよいですか?

##ページングクエリステートメントを使用します。 (推奨される学習: mysql の学習)

ページング クエリは毎回少量のデータのみをクエリするため、大量のメモリを消費しません。データが大きいため、ページング クエリを使用すると時間を節約できる場合があります。

String sql = " SELECT uid,uname  FROM t_user LIMIT ?,? " ;
        PreparedStatement  ps = con.prepareStatement(sql) ;
        int pageSize = 10000; 
        int pageId = 0; 
        do { 
            pst.setInt(1, pageId * pageSize); 
            pst.setInt(2, pageSize); 
            ResultSet rs = pst.executeQuery();

            boolean isEmpty = true; 
            while (rs.next()) { 
                 isEmpty = false; 
                 id = rs.getInt(1); 
                 name = rs.getString(2); 
            } 
            if (isEmpty) { 
                break; 
            } 
            pageId++; 
        } while (true); 
        con.close(); 
    } catch (SQLException e) { 
        e.printStackTrace(); 
    }
ログイン後にコピー

URL パラメータ構成の追加

jdbc URL に 2 つのパラメータを追加すると問題なく、メモリ オーバーフローの問題が正常に解決されます。


"jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100";
ログイン後にコピー

(フェッチについて説明します。SQL クエリ ステートメントを実行するときは、クライアントとサーバーの両方でカーソルを開き、クエリ データを保存するためにそれぞれメモリ領域を申請する必要があります。 . バッファ。このメモリ領域に格納されるデータの数は fetchsize によって決まります。同時に、各ネットワーク パケットは fetchsize レコードをクライアントに送信します)

以上がSQL クエリのデータが多すぎてメモリ オーバーフローが発生した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
sql
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート