MySQL 사전 컴 파일 기능 상세 설명

본 고 는 여러분 께 MySQL 사전 컴 파일 기능 을 공유 하 였 으 며,여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
1.사전 컴 파일 의 장점
모두 가 평소에 JDBC 의 Prepared Statement 인 터 페 이 스 를 사용 한 적 이 있 는데,이것 은 사전 컴 파일 기능 이 있다.무엇이 사전 컴 파일 기능 입 니까?그것 은 어떤 좋 은 점 이 있 습 니까?
클 라 이언 트 가 서버 에 SQL 문 구 를 보 낸 후에 서버 는 항상 SQL 문장의 문법 형식 이 정확 한 지 검증 한 다음 에 SQL 문 구 를 실행 가능 한 함수 로 컴 파일 해 야 한다.마지막 으로 SQL 문 구 를 실행 하 는 것 이다.그 중에서 문법 을 검증 하고 컴 파일 하 는 데 걸 리 는 시간 이 SQL 문 구 를 실행 하 는 것 보다 더 걸 릴 수 있 습 니 다.
만약 에 우리 가 insert 문 구 를 여러 번 실행 해 야 하지만 매번 삽입 하 는 값 이 다 를 뿐 MySQL 서버 도 매번 SQL 문장의 문법 형식 과 컴 파일 을 검사 해 야 하기 때문에 너무 많은 시간 을 낭비 합 니 다.사전 컴 파일 기능 을 사용 하면 SQL 문 구 를 한 번 만 문법 검사 와 컴 파일 하기 때문에 효율 이 높다.
2,MySQL 실행 사전 컴 파일
MySQL 의 사전 컴 파일 은 세 단계 로 나 뉜 다.
사전 컴 파일 문 구 를 실행 합 니 다.예 를 들 어 prepare my fun from'select*from tbook where bid=?'
변 수 를 설정 합 니 다.예 를 들 어 set@str='b1'
실행 문,예 를 들 어:execute myfun using@str
my fun 을 다시 실행 해 야 한다 면 첫 번 째 단 계 는 필요 하지 않 습 니 다.즉,문 구 를 컴 파일 할 필요 가 없습니다.
변 수 를 설정 합 니 다.예 를 들 어 set@str='b2'
실행 문,예 를 들 어:execute myfun using@str
MySQL 로 그 를 보면 실행 과정 을 볼 수 있 습 니 다.

3.Statement 을 사용 하여 사전 컴 파일 을 수행 합 니 다.
Statement 을 사용 하여 사전 컴 파일 을 실행 하 는 것 은 위의 SQL 문 구 를 한 번 실행 하 는 것 입 니 다.

Connection con = JdbcUtils.getConnection();
Statement stmt = con.createStatement();
stmt.executeUpdate("prepare myfun from 'select * from t_book where bid=?'");
stmt.executeUpdate("set @str='b1'");
ResultSet rs = stmt.executeQuery("execute myfun using @str");
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

stmt.executeUpdate("set @str='b2'");
rs = stmt.executeQuery("execute myfun using @str");

while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.close();
stmt.close();
con.close();

4,useServerPrepStmts 매개 변수
기본적으로 Prepared Statement 을 사용 하면 사전 컴 파일 을 실행 할 수 없습니다.url 에서 useServerPrepStmts=true 인자(MySQL Server)를 제시 해 야 합 니 다.
4.1 이전 버 전 은 사전 컴 파일 이 지원 되 지 않 았 으 며,커 넥 터/J 는 5.0.5 이후 버 전 으로 기본적으로 사전 컴 파일 기능 이 켜 지지 않 았 습 니 다).
jdbc:mysql://localhost:3306/test?useServerPrepStmts=true
이렇게 해야만 my sql 구동 이 먼저 SQL 문 구 를 서버 에 보 내 사전 컴 파일 한 다음 에 executeQuery()를 실행 할 때 매개 변 수 를 서버 에 만 보 낼 수 있 습 니 다.

Connection con = JdbcUtils.getConnection();
String sql = "select * from t_book where bid=?";
PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, "b1");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

pstmt.setString(1, "b2");
rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.close();
pstmt.close();
con.close();

5.cachePrepStmts 인자
서로 다른 Prepared Statement 대상 을 사용 하여 같은 SQL 문 구 를 실행 할 때 두 번 컴 파일 하 는 현상 이 나타 납 니 다.이 는 캐 시 컴 파일 이 없 는 함수 key 를 구동 하여 두 번 컴 파일 하기 때 문 입 니 다.캐 시 컴 파일 후 함수 의 key 를 원한 다 면 cachePrepStmts 인 자 를 true 로 설정 해 야 합 니 다.예 를 들 면:
  jdbc:mysql://localhost:3306/test?useServerPrepStmts=true&cachePrepStmts=true

Connection con = JdbcUtils.getConnection();
String sql = "select * from t_book where bid=?";
PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setString(1, "b1");
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

pstmt = con.prepareStatement(sql);
pstmt.setString(1, "b2");
rs = pstmt.executeQuery();
while(rs.next()) {
 System.out.print(rs.getString(1) + ", ");
 System.out.print(rs.getString(2) + ", ");
 System.out.print(rs.getString(3) + ", ");
 System.out.println(rs.getString(4));
}

rs.close();
pstmt.close();
con.close();


6.일괄 처리 열기
MySQL 의 일괄 처리 도 매개 변 수 를 통 해 열 어야 합 니 다:rewriteBatched Statements=true
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기