Mysql遍歷大表(Mysql大量資料讀取記憶體溢位的解決方法)
阿新 • • 發佈:2018-11-09
mysql jdbc預設把select的所有結果全部取回,放到記憶體中,如果是要遍歷很大的表,則可能把記憶體撐爆。
- 一種辦法是:用limit,offset,但這樣你會發現取資料的越來越慢,原因是設定了offset,mysql需要將讀取位置移動到offset的位置,隨著offset增大,取資料也越來越慢;
- 另外一種辦法是:用資料流的方式取資料,這時需要設定:
- stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
- java.sql.ResultSet.CONCUR_READ_ONLY);
- stmt.setFetchSize(Integer.MIN_VALUE);
這時候,mysql jdbc driver,一行行的取結果集。
但這種方式有幾個限制:
- 只能從該連線只能取完所有結果集後才能執行其他SQL;
- resultset.getRow(),是不支援的,呼叫會拋unsupportedException;