개인사정으로 질문내용 삭제합니다 죄송합니다 0 12 1,352

by 될때까지 [SQL Query] [2013.08.16 16:04:34]


개인사정으로 질문내용 삭제합니다 죄송합니다

by 마농 [2013.08.16 16:38:33]
정렬 후 일부만 취하는 경우
Order By 와 함께 Rownum 을 사용합니다.
인덱스가 없다면 힌트를 써봐야 아무 소용 없고.
인덱스가 있다면 구 버전에서는 INDEX_DESC 라는 힌트로 정렬을 제거했습니다.
하지만 요즘 버전에서는 오히려 Order By 방식을 선호합니다.
왜냐하면 Order By 인덱스컬럼 DESC 하더라도 실제 동작할 때는 정렬 안합니다.
인덱스 스캔으로 전체 정렬하는 비효율이 없이 동작하기 때문이죠.
힌트로 제어하는 방법의 경우,
테이블을 재생성한다던가 하는 작업 발생시
인덱스가 사라지거나 인덱스명이 달라지는 경우가 발생되어.
틀린 결과가 나올 가능성이 있습니다.
그래서 요즘은 Order By 를 더 권장하는 추세입니다.

by 될때까지 [2013.08.16 16:56:11]
음... 저도 where 절에서 조건만 rownum <= 10 으로 하면 편하고 좋을 것 같은데
큰 순서대로 10개를 조회하는 것을 반드시 힌트를 사용해서 작성하라고 하네요
그러면 이런 경우엔 인덱스에 관련된 힌트만 사용가능한건가요?
그렇다면 PK인덱스를 활용해서라도 가능할까요?

by 마농 [2013.08.16 17:09:09]
정렬하고자 하는 항목에 대한 인덱스가 있을 때 INDEX_DESC 힌트 사용 가능합니다.

by 될때까지 [2013.08.16 17:12:10]
감사합니다 일단은
select /*+ INDEX_DESC(SITE_TEST PK_SITE_TEST) */ sitecd
  from site_test
 where rownum <= 10
로 정렬하고자 하는 컬럼이 pk컬럼이길래 유일인덱스 사용해서 조회해봤습니다
2가지 방법이 있다고 하니 1가지 방법을 더 찾아봐야겠네요
인덱스말고 다른 힌트 활용해서 큰 순서대로 10개 값 조회할 수 있는 방법이 있다면 알려주시면 감사하겠습니다

by 마농 [2013.08.16 17:23:19]
해당 문제를 풀기 위한 최적의 힌트는 INDEX_DESC 뿐입니다.
다른 힌트는 없을 것 같구요.
그렇다면 원하는 것은 힌트의 종류 2가지가 아닐것 같습니다.
힌트를 사용하는 방법 2가지일듯 합니다.
/*+ 힌트 */ -- 여러줄에 걸쳐서 힌트 사용 가능, 힌트 끝이 명확하므로 같은 라인에 컬럼 조회 가능
--+ 힌트    -- 한줄 힌트, 한줄이 몽땅 힌트이므로 같은 라인에 컬럼 조회 불가능
아니면 INDEX_DESC 힌트를 사용하는 두가지 방법
/*+ INDEX_DESC(테이블명 인덱스명) */ -- 인덱스르르 명확하게 지정
/*+ INDEX_DESC(테이블명 컬럼명) */   -- 컬럼이 포함된 인덱스 자동으로 선택 수행

by 될때까지 [2013.08.16 17:24:46]

지금 여러가지 검색해서 알아보는 중인데 혹시 first_row를 활용할 수는 없는걸까요?


by 될때까지 [2013.08.16 17:34:16]
방법이 두가지라고 해서 계속 고민했는데 힌트를 사용하고, 사용 안하고 두가지 방법으로 작성하라는 이야기였다네요 죄송합니다 마농님
그래도 괜찮으시다면 first_row 힌트가 이번 경우에 적용이 가능한지에 대해서도 답변주시면 감사하겠습니다 문제와는 관계 없어졌지만 궁금해서 알아보는 중입니다 ^^;

by 될때까지 [2013.08.16 17:42:45]
/*+ INDEX_DESC(테이블명 컬럼명) */   -- 컬럼이 포함된 인덱스 자동으로 선택 수행
이라는 부분도 궁금해서 직접 실행해보았는데,
힌트를 타지 않습니다
오렌지 사용중인데 혹시 오라클 버전때문에 적용이 안되는 경우에 속하는 건지요?
선택한 컬럼은 pk인덱스가 존재하는 컬럼입니다

by 마농 [2013.08.16 17:54:15]
버전 탓입니다.
11G 부터 되는 모양이네요.. 아마도.

by 될때까지 [2013.08.16 17:59:58]

아하 그렇군요 감사합니다
검색하면 쉽게 알 수 있는 부분일텐데 질문해서 정말 죄송합니다
힌트를 사용하지 않고 작성하는 쿼리문을 다른 방법으로 작성하라고해서 그 부분 하는 중인데 시간이 너무 촉박해서 개인적인 궁금증으로 다른 문제를 검색해 볼 수는 없고... 궁금해서 집중은 안되고 ㅠㅠ 시간이 허락할 때는 최대한 검색해서 스스로 해결할 수 있도록 하겠습니다


by 마농 [2013.08.16 17:37:02]
필요한건 역순정렬이고
역순정렬을 제일 정확하게 보장하는 것은 ORDER BY DESC 입니다.
정렬 없이도 정렬된 결과를 얻을 수 잇는 방법이 인덱스 스캔이고
인덱스를 역으로 읽으려면 INDEX_DESC 힌트 뿐입니다.
이거 외에 역순정렬을 해주는 힌트는 어디에도 없습니다.
first_rows 힌트는 이 문제에 해당하는 힌트가 아닙니다.

by 될때까지 [2013.08.16 17:38:44]
감사합니다!
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입