database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 37840 게시물 읽기
No. 37840
쿼리 질문 드립니다. 도움좀 부탁드리겠습니다.
작성자
개발자A(makusha)
작성일
2010-08-09 16:05
조회수
2,886

한 테이블에 대략 400만개 좀 안되는 데이터가 들어 있습니다.

 SELECT 닉네임,내용,글번호

 FROM
     (
       SELECT    
       글번호,
       닉네임,
       글내용,
       ROW_NUMBER() OVER(ORDER BY 글번호 DESC)  AS NUM
  FROM  PBOARD    WHERE 소유자 = V_OWNER
  )

 WHERE NUM BETWEEN (V_PAGE-1)*10+1 AND V_PAGE*10;

글번호(Unique)와 소유자에 인덱스 걸려 있구요.

400만개중 내가 쓴글중에 10개씩 패이징해서 가져오는건데 생각보다 오래 걸리네요.

단순히 데이터가 많아서 오래 걸리는건지 아니면 최적화 시킬수 있는지 답변좀 부탁드리겠습니다.

 

 

 

 

이 글에 대한 댓글이 총 2건 있습니다.

1. 인덱스의 구성이 (글번호 + 소유자) 라면
소유자만 조건을 걸어서는 인덱스를 못탑니다.
(소유자) 또는 (소유자 + 글번호) 인덱스를 추가하셔야 합니다.


2. 번호를 모두 부여한뒤 페이지 조건을 준다면?
부분범위 처리가 되질 않습니다.
(소유자 + 글번호) 인덱스를 추가하고
INDEX_DESC 힌트를 통해 역순으로 가져오시면서
rownum을 붙여주는 방식으로 하는것이 좋을 듯 합니다.


3. 필요한 모든 항목을 함께 페이징하는것보다는
인덱스 컬럼에 해당하는 글번호 만으로 페이징 처리한 후
해당 글번호에 해당하는 기타 내용을 조인하여 가져오는 방식이 좋겠네요.


SELECT b.*
  FROM (SELECT /*+ INDEX_DESC(pboard 인덱스명) */
               ROWNUM num
             , 글번호
          FROM pboard
         WHERE 소유자 = v_owner
           AND ROWNUM <= v_page * 10
        ) a
     , pboard b
 WHERE a.num >= v_page * 10 - 9
   AND a.글번호 = b.글번호
   AND ROWNUM <= 10
;

마농(manon94)님이 2010-08-09 17:42에 작성한 댓글입니다.

좋은 답변 정말 감사드립니다.

한번 수정을 해봐야 겠네요.^^

개발자A(makusha)님이 2010-08-09 20:49에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
37844마지막 숫자 제외하고 값 가져오는 함수가 있나요 [2]
심심이
2010-08-12
2677
37843프로시져 호출시 가끔 세션이 쌓이면서 딜레이가 생기네요. [3]
개발자A
2010-08-11
2693
37842데이타베이스 표준?? [1]
박종덕
2010-08-11
2366
37840쿼리 질문 드립니다. 도움좀 부탁드리겠습니다. [2]
개발자A
2010-08-09
2886
37839TimeStamp 의 group by.. [1]
이영찬
2010-08-09
3675
37837oracle 학사 DB 연동 [1]
김경원
2010-08-09
2932
37836전에 nc소프트 면접볼때요 db 연결 방식에 대해 묻던데요. [1]
이근호
2010-08-09
3124
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다