메뉴 건너뛰기

?

단축키

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. 오라클(PL/SQL) 미리 정의된 예외처리

    Date2016.12.08 Views7215
    Read More
  2. 오라클 계정 lock 해제

    Date2016.12.08 Views8444
    Read More
  3. ORA-01652 128(으)로 테이블 공간 ***에서 임시 세그먼트를 확장할 수 없습니다.

    Date2016.12.08 Views9248
    Read More
  4. IMP-00010: 엑스포트 파일이 유효하지 않고, 헤더가 검증에 실패했습니다

    Date2016.12.08 Views8807
    Read More
  5. 오라클 DB 생성 후 설정 Listener.ora & Tnsnames.ora (윈도우)

    Date2016.12.08 Views23306
    Read More
  6. 오라클11g DB 생성

    Date2016.12.08 Views9727
    Read More
  7. 오라클 테이블 생성 스크립트 DDL 추출 - 깔끔하게 Table 전부 추출(Export)하기

    Date2016.12.08 Views12514
    Read More
  8. CentOS 6.5 에 Oracle Database 11g Release 2 설치하기

    Date2016.12.08 Views12409
    Read More
  9. Oracle DBMS_CRYPTO 사용하기 - 암복호화 하기

    Date2016.12.08 Views11605
    Read More
  10. sqlplus에서 Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법 sqlplus 데이터 insert 입력값 요구

    Date2016.12.08 Views8910
    Read More
  11. Oracle SQL Developer 도구 활용하기 - Part2

    Date2016.12.08 Views11317
    Read More
  12. Oracle SQL Developer 도구 활용하기 - Part1

    Date2016.12.08 Views11740
    Read More
  13. ORA-39142 덤프 버전이 틀려서 넣지 못할 때

    Date2016.12.08 Views8967
    Read More
  14. 데이터의 암호화 및 복호화

    Date2016.12.08 Views13237
    Read More
  15. oracle 에서 Index를 이용해서 즉 힌트와 rownum을 이용하여 게시판 작성하기

    Date2016.12.08 Views7023
    Read More
  16. 오라클에서 레코드 값이 없을때

    Date2016.12.08 Views13469
    Read More
  17. CLOB TEXT 데이타를 저장하고, 조회하는 예제

    Date2016.12.08 Views13061
    Read More
  18. 오라클 25가지 SQL 작성법

    Date2016.12.08 Views7706
    Read More
  19. rownum 사용 - 최근글 몇개만 가져오기

    Date2016.12.08 Views9984
    Read More
  20. Oracle Batch Processing

    Date2016.12.08 Views6822
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved