쿼리속도 향상과 효율적인 게시판 쿼리
실무에서 해결한 문제를 정리해 올립니다.
제가 유지보수를 맡게된 사이트에서 답변형 게시판의 문제를 해결하는데 사용한
쿼리입니다. 게시물 수가 9000건을 넘습니다.
게시판 페이지를 가면 6~8초정도 기다려야 첫페이지가 나옵니다.
다음페이지로 이동할 때도 걸리는 시간은 마찬가지입니다.
DBA 와 같이 상의하고 테스트한 결과 중요한 차이점을 발견했습니다.
쿼리하는 컬럼을 지정하느냐 아니면 * 를 써서 모두 가져오느냐가 큰 성능의 차이를
보였습니다. 단순히 order by 가 들어가면 정렬(sorting) 때문에 느려지는 것으로 알고
있었는데 6초 이상 걸리던 쿼리가 단 0.2 초만에 해결되었습니다.
select *
from pm2000_qna order by record_no desc, record_depth
와
select record_number, record_no, record_depth, record_depthno, record_title,
record_writer,
writer_email, to_char(record_date,'yyyy/mm/dd') record_date, read_count
from pm2000_qna order by record_no desc, record_depth
는 큰 차이라는 뜻입니다.
그리고,
효율적인 db접속을 위해서 게시물 몽땅 가져와서 rs.next() 로 돌려서 위치를 찾는 것
보다는 sql에서 게시물 수만큼 가져와서 뿌려주는 것이 나은 점에 대해서는 이 사이트 여러
곳에서 토론되고 있는 줄 압니다.
오라클에서는 rownum 이 있죠. 어거지로 쓰는 것 같지만 어쩔 수 없죠. 머리를 굴리는
수밖에요.
^^; 수고를 좀 덜어드리면 좋겠습니다.
select * from (
select * from (
select record_no, record_depth, record_depthno, record_title, record_writer,
writer_email, to_char(record_date,'yyyy/mm/dd') record_date, read_count
from pm2000_qna order by record_no desc, record_depth
) where rownum <= ? order by rownum desc
) where rownum <= ? order by rownum desc
jsp 에선
pstmt.setInt(1,(pageNo+1)*pageSize); // pageNo는 0부터..
pstmt.setInt(1,pageSize);
로 해주면 됩니다.
일단 sqlplus 에서 테스트 해보십시오.
아주 속이 시원하더군요.
부록으로 mysql 버전입니다.
select record_no, record_depth, record_depthno, record_title, ...
from pm2000_qna order by seq desc limit ?, ?
jsp에선
pstmt.setInt(1,pageNo*pageSize); // pageNo는 0부터..
pstmt.setInt(1,pageSize);
하시면 됩니다.
좋은 하루 되십시오.
----
http://okjsp.pe.kr kenu[이 게시물은 관리자님에 의해 2011-10-31 16:47:36 Oracle에서 이동 됨]
댓글 1개
visualp
14년 전
over 구문 사용 하심 조금더 단순 하게 쿼리 만들 수 있습니다.
게시글 목록
| 번호 | 제목 |
|---|---|
| 12537 | |
| 29323 |
HTML
초보자를 위한 포토샵 강좌 47
|
| 12536 |
JavaScript
초보자를 위한 포토샵 강좌 46
|
| 12535 | |
| 12534 | |
| 12533 | |
| 29322 |
HTML
초보자를 위한 포토샵 강좌 42
|
| 12532 | |
| 12531 | |
| 12530 | |
| 29321 |
HTML
초보자를 위한 포토샵 강좌 38
|
| 12529 |
JavaScript
초보자를 위한 포토샵 강좌 37
|
| 12528 | |
| 12527 | |
| 12526 | |
| 29320 |
HTML
초보자를 위한 포토샵 강좌 33
|
| 12525 |
JavaScript
초보자를 위한 포토샵 강좌 32
|
| 12524 | |
| 12523 | |
| 29319 |
HTML
초보자를 위한 포토샵 강좌 29
|
| 12522 |
JavaScript
초보자를 위한 포토샵 강좌 28
|
| 12521 | |
| 12520 | |
| 12519 | |
| 29318 |
HTML
초보자를 위한 포토샵 강좌 24
|
| 12518 |
JavaScript
초보자를 위한 포토샵 강좌 23
|
| 12517 | |
| 12516 | |
| 29315 |
HTML
레이어 달력...
2
|
| 25032 |
계약서
웹디자인 재택근무계약서
3
|
| 25030 | |
| 25028 |
계약서
매매계약서
1
|
| 25027 | |
| 25026 | |
| 25024 | |
| 25022 | |
| 80 | |
| 29314 |
HTML
초보자를 위한 포토샵 강좌 20
|
| 12515 |
JavaScript
초보자를 위한 포토샵 강좌 19
|
| 12514 | |
| 12513 | |
| 12512 | |
| 29313 |
HTML
초보자를 위한 포토샵 강좌 15
|
| 12511 |
JavaScript
초보자를 위한 포토샵 강좌 14
|
| 12510 | |
| 12509 | |
| 12508 | |
| 12506 | |
| 25021 |
계약서
인터넷업무제휴계약서
|
| 25019 |
계약서
저작권 양도계약서
1
|
| 25017 |
계약서
업무계약서
1
|
| 78 | |
| 12505 | |
| 29311 |
HTML
초보자를 위한 포토샵 강좌 8
1
|
| 12504 |
JavaScript
초보자를 위한 포토샵 강좌 7
|
| 12503 | |
| 12502 | |
| 12501 | |
| 29310 |
HTML
초보자를 위한 포토샵 강좌 3
|
| 12500 |
JavaScript
초보자를 위한 포토샵 강좌 2
|
| 12499 | |
| 12496 |
기타
iconv 활용하기
2
|
| 75 | |
| 12495 |
JavaScript
RED5 Documentation PDF
|
| 12491 |
MySQL
모바일 게시판 ANYBBS PHP 버전
3
|
| 12489 | |
| 73 | |
| 12488 |
기타
부드러운 움직임 2
|
| 12487 |
기타
부드러운 움직임
|
| 71 | |
| 12486 | |
| 12479 |
JavaScript
[펌] 웹방화벽 mod_security 다운로드 및 설정
6
|
| 29308 | |
| 62 | |
| 12476 |
기타
apache 재시작
2
|
| 12475 |
MySQL
윈도우 Mysql 시동 & 중지 명령어
|
| 12474 |
MySQL
mysql 기본 사용법
|
| 12471 |
MySQL
mysql 기본 사용법
2
|
| 12470 |
MySQL
mysql 버전확인
|
| 12467 | |
| 12465 | |
| 12463 |
MySQL
mysql5 euckr 덤프 옵션
1
|
| 12462 | |
| 12461 |
기타
입체분할 액션스크립트
|
| 61 | |
| 54 | |
| 46 | |
| 12458 | |
| 12456 | |
| 43 | |
| 12455 |
JavaScript
전자계산기 스크립트
|
| 29304 |
HTML
웹페이지 프린트하는 스크립트
3
|
| 29303 |
HTML
자동새로고침
|
| 29302 |
HTML
스타크래프트 로딩 스크립트
|
| 29300 |
HTML
미디어 연주기 소스
1
|
| 12454 |
기타
메일 폼 스크립트
|
| 29299 |
HTML
status바 반짝반짝
|
| 29298 |
HTML
메뉴가 하늘에서 뚝뚝 떨어집니다.
|
| 12453 |
JavaScript
텍스트 이동(물흐르듯이)
|
| 29297 |
HTML
멀티플 시계스크립트
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기