메뉴 건너뛰기

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
oracle 에서 Index를 이용해서 즉 힌트와 rownum을 이용하여 게시판 작성하기

아래 사이트 내용 퍼옴 링크
http://www.wowschool.co.kr/servlet/wowbbsManageServlet?wow_cmd=select&pageCnt=5&Current_page=0&pageListCnt=20&startKey=0&pageUpDown=pageNext&wowbbsType=1010&wowbbsTitle=ORACLE 

보통 인터넷 커뮤니티에서는 거의 대부분 게시판 으로 구성 되여있다
하지만 보통 게시판을 작성하는 방법의 문제점및 개선책을 풀어보겠읍니다

case 1 :

select * from  
(select rownum,name,date,text from tableName where name ='wowschool' order by bbs_no )   
where rownum >=srart_rownum  and rownum < end_rownum


위 방법은 많은은 사이트에서 작성 하는것을 보았읍니다
이것보다 더 이상하게 작성한것도 많이 보았으나  위조건의 장점은 oracle에서 응용 프로그램에게
넘겨주는 값이  주워진 rownum 사이 값만 돌려줌니다

사용 Data 건수가 적을때는 커다란 문제가 없읍니다

하지만 사용 Data 건수가 많을 경우 다음 문제가 발생합니다
=>data 건수가 적으면 위의 sub query  붉은색 부분 sql 부분에 처리를 위하여 sort작업이 메모리 소팅 영역에서 처리 되나
건수가 많으면 메모리에서 처리 못하고  tempary 세그먼트에서 sort 작업을 처리 한다

이런경우 Disk I/O 처리가 많이 발생 성능 저하에 치명적이다
물론 Data 를  메모리에 read 하는 작업도 부하가 든다

위의 붉은 부분 sql 에서 처음 부터 sort된 순서로 원한는 갯수 예를 들면 50개면 처음부터 50 개 읽어
드리는 방법을 연구 해보아야 할것이다

위경우는 전체을 sort 한다음 그중에서  원하는 갯수를  read 했다

case 2 : sort 및 원하는 갯수를 hint와 rownum 을 이용한 처리 

SELECT /*+ INDEX_ASC(A pk_wowbbs ) */   
        BBS_NO,HIT_CNT,TITLE,NAME,INDATE,WRITE_MODE,BBS_MANAGER_NO  
        FROM WOWBBS 
        WHERE BBS_NO > 시작입력값  AND  
                     ROWNUM <= 30  


위 조건은 보통 게시판에서 PAGE를( [1][2][3][4][5])선택시 관련 PAGE선택시 선택된 PAGE에 해당하는 검색 목록을 보여 주는
방법이다  시작입력값과 그리고 목록은 30개 를  SORT 되여있는 INDEX를 사용하여 검색 하라는 명령이다
위 방법은 원하는 목록만 정확히 소팅을 따로 없이 검색해서 결과를 준다


물론 위결과를 처리하기전에 PAGE를 처리해야한다 즉 게시판하단에 보통 
<< [1] [2] [3] [4] [5] [6] >>  이런 방식으로 PAGE를 만드는 방법을 설명하겠읍니다
물론 구현하는 사람마다 차이는 있을수있읍니다
더 좋은 방법이있을수있읍니다  일단 PAGE 처리하는시 PAGE 번호에  현재 PAGE 번호및
시작 KEY를 링크합니다

 if(pageUpDown.equals("pagePrew")){
    /*** pagePrew **/ 
           
         selectSql.append(" SELECT  ROWNUM ord ,Z.key_no key_no,Z.flag flag FROM ");
         selectSql.append(" ( ");
         selectSql.append(" SELECT /*+ INDEX_DESC(A pk_wowbbs ) */   "); 
         selectSql.append(" A.BBS_NO key_no ,mod(rownum,?)  flag  "); 
         selectSql.append(" from wowbbs A ");
         selectSql.append(" where  A.BBS_NO < ? and  ");
         selectSql.append(" rownum   <=  30 * 5   ");
         selectSql.append(" ) Z  "); 
         selectSql.append(" where   Z.flag  = 1 ");   

  }else{
       /*** pageNext **/
         selectSql.append(" SELECT  ROWNUM ord ,Z.key_no key_no,Z.flag flag FROM ");
         selectSql.append(" ( ");
         selectSql.append(" SELECT /*+ INDEX_ASC(A pk_wowbbs ) */   "); 
         selectSql.append(" A.BBS_NO key_no ,mod(rownum,?)  flag  "); 
         selectSql.append(" from wowbbs A ");
         selectSql.append(" where  A.BBS_NO > ? and  ");
         selectSql.append(" rownum   <= 30 * 5 ");
          selectSql.append(" ) Z  "); 
         selectSql.append(" where   Z.flag  = 1 ");    

  위 방법으로 <<  PAGE 선택시  pagePrew   
  >> PAGE 선택시   pageNext  로 검색 해서 PAGE [1] [2] [3] [4] [5] 식으로 시작 KEY를 구하여 링크 잡이 놓는다
위조건은 INDEX생성시  BBS_NO 를 중심으로 KEY를 만들었고 ROWNUM은 검색 순서로
INDEX만 가지고 PAGE를 만들수있다
30은 한 PAGE에서 보여 줄수있는 목록수이고 5는 PAGE 번호 [1] [2] [3] [4] [5] 만큼이다

위조건에서 검색해서 나온 결과로 PAGE LINK 작업 현제 PAGE등 계산이 필요하다
일정시점에서 시간이있을때 WOWSCHOOL 계시판을 공개하겠 읍니다 정리후
위조건에거 추가 검색조건들 응용이 필요할것입니다


List of Articles
번호 제목 날짜 조회 수
81 스키마 조회 쿼리 모음 2016.09.12 10036
80 숫자를 문자로 변환 시 소수점 처리 (TO_CHAR, FM) file 2016.12.08 15027
79 숫자 체크 방법 (IS_NUMBER, IS_NUMERIC) file 2016.12.08 23126
78 동적쿼리(Dynamic SQL) 사용법 (텍스트 쿼리) file 2016.12.08 15036
77 데이터의 암호화 및 복호화 file 2016.12.08 13245
76 데이터베이스 백업하기 ( import : 가져오기 , export : 내보내기 ) file 2016.12.08 9886
75 단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법 2016.08.29 9386
74 다른 버전의 오라클 import, export 하기 file 2016.09.12 9475
73 날짜관련 계산하기(1) file 2016.12.08 8090
72 기간내 모든 날자(일자) 구하기 2016.12.08 7358
71 구분자로 자르기 (Split) file 2016.12.08 20564
70 관리자( SYSTEM, SYS) 계정 비밀번호를 잊어버렸을때.. file 2016.12.08 8336
69 계층형 쿼리의 응용 - 답변형 계시판 file 2016.12.08 8752
68 계층형 쿼리의 응용 - 달력만들기 file 2016.12.08 8528
67 간단한 쿼리로 일련번호 쉽게 넣기 - ROWNUM 사용 file 2016.08.29 9472
66 [Oracle|오라클] 한글 초성 검색 함수 2016.12.08 9087
65 [Oracle] 테이블 스페이스 및 사용자 계정 생성 방법 2016.12.08 8572
64 [Oracle] Rownum을 이용한 페이징 처리 2016.12.08 10385
63 [Oracle] DB Export, Import 방법 2016.12.08 12607
62 [Oracle SQL] 여러 행(ROW)을 하나의 컬럼(COLUMN)으로 합치기 (WM_CONCAT) file 2016.12.08 20013
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved