首頁  >  文章  >  資料庫  >  sql查詢資料過多記憶體溢出怎麼辦

sql查詢資料過多記憶體溢出怎麼辦

(*-*)浩
(*-*)浩原創
2019-10-28 09:53:497092瀏覽

正常來說,一般是不會出現這種情況的,但也不能保證,偶爾有這種情況發生,解決方案如下:

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上加兩個參數就OK,成功解決記憶體溢出的問題。


"jdbc:mysql://localhost:3306/db3?useCursorFetch=true&defaultFetchSize=100";

( 解釋一下Fetch,當我們執行一個SQL查詢語句的時候,需要在客戶端和伺服器端都打開一個遊標,並且分別申請一塊記憶體空間,作為存放查詢的資料的一個緩衝區。這塊記憶體區,存放多少筆資料就由fetchsize決定,同時每次網路包會傳送fetchsize條記錄到客戶端)

以上是sql查詢資料過多記憶體溢出怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn