메뉴 건너뛰기

?

단축키

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 계시판을 공개하겠 읍니다 정리후
위조건에거 추가 검색조건들 응용이 필요할것입니다


  1. No Image 29Aug
    by
    2016/08/29 Views 8145 

    Oracle에서 중복 조인을 피하기 위한 Update 방법 (MERGE 사용)

  2. Oracle에서 세자리 콤마 찍기

  3. Oracle에서 사용자가 생성한 모든 Table, View를 삭제하는 쿼리 만들기

  4. Oracle에서 ORA-28000: 계정이 잠금되었습니다. - 해결 방법

  5. Oracle에서 Foreign Key가 걸려있는 컬럼값 업데이트(update) 하기

  6. oracle 특수문자 입력시 Substitution Variable 변수치환을 없애는 방법

  7. No Image 29Aug
    by
    2016/08/29 Views 7140 

    Oracle 저장 프로시저 샘플

  8. Oracle 에서 테이블과 리소스의 존재 여부를 알아보는 쿼리

  9. No Image 30Aug
    by
    2016/08/30 Views 8335 

    Oracle 에서 NVL, NVL2 함수 사용하는 예제

  10. No Image 08Dec
    by 조쉬
    2016/12/08 Views 7023 

    oracle 에서 Index를 이용해서 즉 힌트와 rownum을 이용하여 게시판 작성하기

  11. Oracle 시퀀스 생성, 추가, 삭제

  12. No Image 11Sep
    by
    2016/09/11 Views 8526 

    oracle 구동 방법 및 재부팅 시 oracle 자동 시작 설정 ( /etc/rc.local )

  13. Oracle XDB 리스너 포트 바꾸기

  14. No Image 11Sep
    by
    2016/09/11 Views 8014 

    oracle user 관리

  15. Oracle SQL Developer 도구 활용하기 - Part2

  16. Oracle SQL Developer 도구 활용하기 - Part1

  17. No Image 11Sep
    by
    2016/09/11 Views 10650 

    oracle log 보기 - alert, trace

  18. No Image 11Sep
    by
    2016/09/11 Views 7492 

    oracle listener 로그 형식 - oracle 11g 이전 versioin의 형식으로 변경

  19. Oracle DBMS_CRYPTO 사용하기 - 암복호화 하기

  20. Oracle DB 에서 Toad 를 사용하여 Procedure 디버깅 하기

Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved