>  기사  >  데이터 베이스  >  SQL 쿼리에 데이터가 너무 많아 메모리 오버플로가 발생하면 어떻게 해야 하나요?

SQL 쿼리에 데이터가 너무 많아 메모리 오버플로가 발생하면 어떻게 해야 하나요?

(*-*)浩
(*-*)浩원래의
2019-10-28 09:53:497016검색

일반적으로 이러한 상황은 발생하지 않지만 가끔 발생한다는 보장은 없습니다. 해결 방법은 다음과 같습니다.

SQL 쿼리에 데이터가 너무 많아 메모리 오버플로가 발생하면 어떻게 해야 하나요? #🎜🎜 #

페이징 쿼리 문을 사용하세요. (추천 학습: mysql learning)

페이징 쿼리는 매번 소량의 데이터만 쿼리하기 때문에 용량도 많이 차지하지 않습니다. 그리고 데이터 양이 많을 경우 페이징 쿼리를 사용하면 시간이 절약됩니다.

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에 두 개의 매개변수를 추가해도 메모리 오버플로 문제가 성공적으로 해결됩니다. 질문.


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

( Fetch를 설명하면 SQL 쿼리 문을 실행할 때 클라이언트와 서버 모두에서 커서를 열고 각각 저장할 메모리 공간을 적용해야 합니다. 쿼리 데이터 버퍼입니다. 이 메모리 영역에 저장된 데이터 수는 fetchsize에 의해 결정됩니다. 동시에 각 네트워크 패킷은 fetchsize 레코드를 클라이언트에 전송합니다.)

위 내용은 SQL 쿼리에 데이터가 너무 많아 메모리 오버플로가 발생하면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:db2 수정 필드 길이다음 기사:db2 수정 필드 길이