Statement 와 PreparedStatement
SQL 을 실행할 수 있는 객체입니다.
Statement
1. 단일로 사용될 때 빠른 속도를 지닙니다.
2. 쿼리에 인자를 부여할 수 없습니다.
3. 매번 컴파일을 수행해야 합니다.
PreparedStatement
1. 쿼리에 인자를 부여할 수 있습니다.
2. 처음 프리컴파일 된 후, 이후에는 컴파일을 수행하지 않습니다.
3. 여러번 수행될 때 빠른 속도를 지닙니다.
Statement 와 PreparedStatement 의 속도차이 비교
Goldilocks 데이터베이스로 진행해보았으며, 테이블의 스키마와 데이터 건수입니다.
gSQL> CREATE TABLE PERFORMANCE (C1 INT PRIMARY KEY, C2 CHAR(30), C3 DATE); Table created. gSQL> SELECT COUNT(*) FROM PERFORMANCE; COUNT(*) -------- 1000000 1 row selected.
Statement 에 대한 소스, 수행시간입니다.
1,000,000 건을 가져오는데 124 초가 걸렸습니다.
s_sTime = System.currentTimeMillis(); Statement stmt = con.createStatement(); for(i = 0; i < 1000000; i++){ stmt.executeQuery("SELECT C1, C2, C3 FROM PERFORMANCE WHERE C1 = " + i ); } s_eTime = System.currentTimeMillis(); System.out.println("Statement Milli Time : " + (s_eTime-s_sTime));
Statement Milli Time : 124750
PreparedStatement 에 대한 소스, 수행시간 입니다.
1,000,000 건을 가져오는데 25 초가 걸렸습니다.
s_sTime = System.currentTimeMillis(); PreparedStatement pstmt = con.prepareStatement("SELECT C1, C2, C3 FROM PERFORMANCE WHERE C1 = ?"); for(i = 0; i < 1000000; i++){ pstmt.setInt(1, i); pstmt.executeQuery(); } s_eTime = System.currentTimeMillis(); System.out.println("PreparedStatement Milli Time : " + (s_eTime-s_sTime));
PreparedStatement Milli Time : 25825
Goldilocks 데이터베이스에서 X$STATEMENT 를 조회하면
Statement 는 매번 컴파일 되기 때문에 항상 수행횟수가 1 인 반면,
PreparedStatement 는 한번 컴파일한 구문을 사용하기 때문에 수행횟수가 증가하는 것을 확인할 수 있습니다.
gSQL> -- Statement gSQL> SELECT ID, SESSION_ID, SQL_TEXT, EXECUTIONS FROM X$STATEMENT; ID SESSION_ID SQL_TEXT EXECUTIONS -- ---------- ------------------------------------------------------------ ---------- 16 4 SELECT ID, SESSION_ID, SQL_TEXT, EXECUTIONS FROM X$STATEMENT 1 0 28 SELECT C1, C2, C3 FROM PERFORMANCE WHERE C1 = 38422 1 gSQL> -- PreparedStatement gSQL> SELECT ID, SESSION_ID, SQL_TEXT, EXECUTIONS FROM X$STATEMENT; ID SESSION_ID SQL_TEXT EXECUTIONS -- ---------- ------------------------------------------------------------ ---------- 19 4 SELECT ID, SESSION_ID, SQL_TEXT, EXECUTIONS FROM X$STATEMENT 1 0 28 SELECT C1, C2, C3 FROM PERFORMANCE WHERE C1 = ? 52676
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] 오버로딩, 오버라이딩 개념 및 차이점 파악하기 (0) | 2018.07.10 |
---|---|
[JAVA] currentTimeMillis, nanoTime 소스 수행 시간 차이 계산하기 (0) | 2018.06.28 |
[JAVA] JSON 형식의 파일 읽어오기 (0) | 2018.06.27 |
[JAVA] 멀티스레드 구현하기, Multi Thread 사용하기 (0) | 2018.06.27 |
[JAVA] Execute, ExecuteQuery, ExecuteUpdate 차이점 알아보기 (3) | 2018.01.23 |