mysql 是目前使用比較廣泛的關係型資料庫,而從資料庫裡面根據條件查詢資料到記憶體的情況想必大家在日常專案實踐中都有使用。
當指定條件的資料量特別大時候一般是通過分頁的方式在前端頁面通過 tag 標籤一頁頁的載入資料到記憶體;但是有些情況下卻不需要使用者切換 tag 標籤的方式一頁頁的載入資料,這時候如果一下子全部把資料載入記憶體,就有可能會導致 oom,雖然這時候可以通過程式控制分頁查詢,但是每次查詢時候資料庫都需要把所有符合條件的資料查詢出來然後根據當前頁的返回來返回指定的頁,這無疑加重了 mysql 伺服器不必要的開銷。
其實在 mysql 中提供了流式查詢,這允許把符合條件的資料一部分一部分的載入到記憶體,本 chat 就來具體講解如何在 mysql中使用流式查詢:
- 當我們在jvm程序裡面的某乙個執行緒裡面執行資料庫查詢時候,其實這個請求首先會呼叫mysql驅動程式。
- mysql驅動接受到請求後會向mysql伺服器發起tcp請求,伺服器端根據條件查詢出匹配的資料,然後通過tcp鏈結傳送到mysql驅動
- mysql驅動內則會把符合條件的資料快取到驅動內,等伺服器返回了所有符合條件的資料後,在一下子把快取裡面的資料返回給呼叫sql的應用程式。
所以如果查詢的資料量特別大,那麼mysql驅動內快取就可能把記憶體撐爆造成oom。
mysql客戶端流式查詢不會一下子把伺服器端所有資料快取起來,而是一部分一部分的把伺服器端返回的資料返回給應用程式層,所以可以有效避免oom。
jdbc程式設計中mysql流式查詢例子:
public
void
selectdata(string sqlcmd,) throws sqlexception catch (sqlexception e)
}} catch (sqlexception e)
} finally
}
可知只是preparestatement時候改變了引數為resultset.type_forward_only, resultset.concur_read_only,並且設定了preparedstatement的fetchsize為integer.min_value。
上面我們講解了jdbc中流式查詢使用,那麼如下在mybatis中使用那?
- 如何在 mybatis 中使用 mybatiscursoritemreader 進行流式查詢?
- 如何在 mybatis 中使用 resulthandler 進行流式查詢?
- 什麼是客戶端流式查詢和伺服器端流式查詢?
更多流式查詢請單擊 單擊我
MySQL 流式讀取 MySQL中流式查詢使用
mysql中流式查詢使用 瀏覽次數 766 標籤 mysql 一 前言 mysql 是目前使用比較廣泛的關係型資料庫,而從資料庫裡面根據條件查詢資料到記憶體的情況想必大家在日常專案實踐中都有使用。當指定條件的資料量特別大時候一般是通過分頁的方式在前端頁面通過 tag 標籤一頁頁的載入資料到記憶體 但...
mysql 流式查詢 mysql資料庫流式查詢
mysql資料庫流式查詢 瀏覽次數 541 標籤 mysql 1.為什麼使用流式查詢?普通查詢方式 1 jvm程序內資料庫執行緒池,某一線程執行查詢時,呼叫mysql驅動程式。2 mysql驅動向mysql伺服器發起tcp請求,伺服器端根據條件查詢匹配的資料,然後通過tcp鏈結傳送到mysql驅動。...
大資料量查詢容易OOM?試試MySQL流式查詢
程式訪問mysql資料庫時,當查詢出來的資料量特別大時,資料庫驅動把載入到的資料全部載入到記憶體裡,就有可能會導致記憶體溢位 oom 其實在mysql資料庫中提供了流式查詢,允許把符合條件的資料分批一部分一部分地載入到記憶體中,可以有效避免oom 本文主要介紹如何使用流式查詢並對比普通查詢進行效能測...