>>disn 님께서 쓰시길<<
:: 보내주신 내용대로 해보았는데...
:: 아래와 같은 결과가 나오네요...
::
:: 어떤 인덱스를 타는지 봐보시라구 그랬는데... 그 말의 정확한 의미를 모르겠어요...
:: 워낙에 오라클에 기초가 부족해서리... -_-;
::
:: 왜 젤 마지막 rownum 으로 seq 17.7이 잡히는지... 그리고 seq가 36번인 게시물이 있는데 이넘이 안나
:: 옵니다.
::
:: rownum 13번으로 seq 36인게 잡혀야 하는데....
::
:: 다시한번 도움 요청합니다...
:: 흐... 답변주신거 정말 감사합니다....
:: 어떤식으로 보답을 드려야 할지...
::
:: SQL> SELECT rownum, rnum, seq FROM
:: (SELECT /*+ index_desc(namgu_minwonqna minwonqna_seq_pk) */
:: seq,rownum as rnum
:: from namgu_minwonqna where seq>0)
:: where rnum>=46 AND rownum<=13 order by seq desc;
::
:: 2 3 4 5
:: ROWNUM RNUM SEQ
:: ---------- ---------- ----------
:: 12 57 35
:: 11 56 34.9
:: 10 55 34
:: 9 54 33
:: 8 53 32
:: 7 52 31
:: 5 50 30
:: 6 51 29.9
:: 3 48 29
:: 4 49 28.9
:: 2 47 28
:: 1 46 26.9
:: 13 58 17.7
::
:: 13 rows selected.
::
::
:: Statistics
:: ----------------------------------------------------------
:: 0 recursive calls
:: 4 db block gets
:: 5 consistent gets
:: 0 physical reads
:: 0 redo size
:: 1115 bytes sent via SQL*Net to client
:: 424 bytes received via SQL*Net from client
:: 2 SQL*Net roundtrips to/from client
:: 1 sorts (memory)
:: 0 sorts (disk)
:: 13 rows processed
::
::
::
::
:: -------------------------------------------------------- from disn
:: mailto : disn@freechal.com
:: ---------------------------------------------------------
현재 plan내용으로봐서는 minwonqna_seq_pk라는 인덱스 뿐만아니라
아예 인덱스 자체를 안타는거 같군요
혹시 인덱스가 생성이 되었는지 확인하셔야 할거같군요
select index_name,index_type,table_owner,table_name
from dba_indexes
where owner = '해당유저대문자로';
하셔서 minwonqna_seq_pk인덱스가 있는지 확인해보시고
없다면
create index minwonqna_seq_pk on namgu_minwonqna(seq);
인덱스를 생성시키셔서 테스트해보세요.
만약 seq가 프라이머리키면
ALTER TABLE namgu_minwonqna
ADD ( CONSTRAINT minwonqna_seq_pk PRIMARY KEY (seq)
USING INDEX
TABLESPACE 해당테이블스페이스명
STORAGE (
INITIAL 1m
NEXT 1m
MINEXTENTS 1
PCTINCREASE 0
) ) ;
생성시킨 후 사용하시고
혹시라도 인덱스가 있는데 안되신다면
SQL>show parameter optimizer_mode
optimizer_mode value가 CHOOSE
라고 되있다면
SELECT rownum, rnum, seq
FROM (SELECT /*+ index_desc(namgu_minwonqna minwonqna_seq_pk) */
seq,rownum as rnum
from namgu_minwonqna
where seq>0) <--------이렇게 강제로 인덱스를 타게 해보세요.
where rnum>=46
AND rownum<=13
order by seq desc; <---이부분은 생략하셔도 될거같군요
혹시라도 안되신다면
SELECT rownum, rnum, seq
FROM (SELECT /*+ index_desc(namgu_minwonqna minwonqna_seq_pk) */
seq,rownum as rnum
from namgu_minwonqna
where seq>0)
where rnum between 46 AND 46 + 13;
rnum으로만 해결해보세요
말이좀 두서가없군요 쩝.
참 plan table를 만드셔야 할거같군요.
추가:데이타파싱 순서가 대략
Select->From->Where->Index->rownum->Order by순으로
진행되는것 같더군요. 참고하세요
다시고쳤습니다.
|