메뉴 건너뛰기

?

단축키

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 UNION ALL 과 ORDER BY 섞어서 쓰기 2016.08.30 9898
80 데이터베이스 백업하기 ( import : 가져오기 , export : 내보내기 ) file 2016.12.08 9886
79 오라클 백업 및 복구(Export, Import) file 2016.12.08 9762
78 오라클11g DB 생성 file 2016.12.08 9727
77 oracle db 백업(full) 2016.09.11 9663
76 조건절에 WHERE 1=1, WHERE 1=0 사용하여 쿼리 간편하게 사용하기 file 2016.08.29 9613
75 다른 버전의 오라클 import, export 하기 file 2016.09.12 9475
74 간단한 쿼리로 일련번호 쉽게 넣기 - ROWNUM 사용 file 2016.08.29 9472
73 PL/SQL에서 자바(Java) 클래스(Class), 함수 실행 방법 file 2016.12.08 9386
72 단일행을 다중 row로 분리, 다중 row 결과를 단일행으로 연결하는 방법 2016.08.29 9386
71 WHERE절에서 Null 값 비교하기 file 2016.08.29 9354
70 ORA-01652 128(으)로 테이블 공간 ***에서 임시 세그먼트를 확장할 수 없습니다. file 2016.12.08 9257
69 Oracle에서 Foreign Key가 걸려있는 컬럼값 업데이트(update) 하기 file 2016.08.29 9170
68 [Oracle|오라클] 한글 초성 검색 함수 2016.12.08 9087
67 oracle 특수문자 입력시 Substitution Variable 변수치환을 없애는 방법 file 2016.08.30 9025
66 ORA-39142 덤프 버전이 틀려서 넣지 못할 때 2016.12.08 8969
65 Oracle 에서 테이블과 리소스의 존재 여부를 알아보는 쿼리 file 2016.08.30 8949
64 오라클 12c (Oracle) 에서 테스트를 위해 샘플 스키마 설치하기 file 2016.08.30 8929
63 시퀀스 초기화 프로시저 2016.09.12 8925
62 sqlplus에서 Ampersand나 특수 문자를 갖는 데이타를 insert하는 방법 sqlplus 데이터 insert 입력값 요구 2016.12.08 8912
Board Pagination Prev 1 2 3 4 5 6 7 Next
/ 7

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved