91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在MySQL中使用流式查詢避免數據OOM

發布時間:2021-01-04 14:13:57 來源:億速云 閱讀:160 作者:Leah 欄目:開發技術

本篇文章為大家展示了怎么在MySQL中使用流式查詢避免數據OOM,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

JDBC實現流式查詢

使用JDBC的PreparedStatement/StatementsetFetchSize方法設置為Integer.MIN_VALUE或者使用方法Statement.enableStreamingResults()可以實現流式查詢,在執行ResultSet.next()方法時,會通過數據庫連接一條一條的返回,這樣也不會大量占用客戶端的內存。

public int execute(String sql, boolean isStreamQuery) throws SQLException {
 Connection conn = null;
 PreparedStatement stmt = null;
 ResultSet rs = null;
 int count = 0;
 try {
  //獲取數據庫連接
  conn = getConnection();
  if (isStreamQuery) {
   //設置流式查詢參數
   stmt = conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
   stmt.setFetchSize(Integer.MIN_VALUE);
  } else {
   //普通查詢
   stmt = conn.prepareStatement(sql);
  }

  //執行查詢獲取結果
  rs = stmt.executeQuery();
  //遍歷結果
  while(rs.next()){
   System.out.println(rs.getString(1));
   count++;
  }
 } catch (SQLException e) {
  e.printStackTrace();
 } finally {
  close(stmt, rs, conn);
 }
 return count;
}

「PS」:上面的例子中通過參數isStreamQuery來切換「流式查詢」「普通查詢」,用于下面做測試對比。

性能測試

創建了一張測試表my_test進行測試,總數據量為27w條,分別使用以下4個測試用例進行測試:

  • 大數據量普通查詢(27w條)

  • 大數據量流式查詢(27w條)

  • 小數據量普通查詢(10條)

  • 小數據量流式查詢(10條)

3.1. 測試大數據量普通查詢

@Test
public void testCommonBigData() throws SQLException {
 String sql = "select * from my_test";
 testExecute(sql, false);
}

3.1.1. 查詢耗時

27w 數據量用時 38 秒

怎么在MySQL中使用流式查詢避免數據OOM

3.1.2. 內存占用情況

使用將近 1G 內存

怎么在MySQL中使用流式查詢避免數據OOM

3.2. 測試大數據量流式查詢

@Test
public void testStreamBigData() throws SQLException {
 String sql = "select * from my_test";
 testExecute(sql, true);
}

3.2.1. 查詢耗時

27w 數據量用時 37 秒

怎么在MySQL中使用流式查詢避免數據OOM

3.2.2. 內存占用情況

由于是分批獲取,所以內存在30-270m波動

怎么在MySQL中使用流式查詢避免數據OOM

3.3. 測試小數據量普通查詢

@Test
public void testCommonSmallData() throws SQLException {
 String sql = "select * from my_test limit 100000, 10";
 testExecute(sql, false);
}

3.3.1. 查詢耗時

10 條數據量用時 1 秒

怎么在MySQL中使用流式查詢避免數據OOM

3.4. 測試小數據量流式查詢

@Test
public void testStreamSmallData() throws SQLException {
 String sql = "select * from my_test limit 100000, 10";
 testExecute(sql, true);
}

3.4.1. 查詢耗時

10 條數據量用時 1 秒

怎么在MySQL中使用流式查詢避免數據OOM

上述內容就是怎么在MySQL中使用流式查詢避免數據OOM,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐陵市| 资溪县| 耿马| 仁寿县| 北安市| 绥阳县| 黄冈市| 高雄市| 巫山县| 庆阳市| 明星| 牙克石市| 临沭县| 资溪县| 太原市| 五峰| 琼海市| 米林县| 会理县| 驻马店市| 烟台市| 怀来县| 扶风县| 巨野县| 呼图壁县| 黄龙县| 章丘市| 开阳县| 海门市| 苍溪县| 海淀区| 福建省| 岳阳市| 三亚市| 库伦旗| 吉安市| 文登市| 防城港市| 汉中市| 塔城市| 手游|