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 37858 게시물 읽기
No. 37858
index scan 이 되지 않고 있습니다.
작성자
what
작성일
2010-08-16 15:34
조회수
4,240

/* Formatted on 2010/08/16 15:28 (Formatter Plus v4.8.8) */
SELECT   DECODE (TO_CHAR (access_date, 'DD'),
                 '', '합계',
                 TO_CHAR (access_date, 'DD') || '일'
                ) access_date,
         COUNT (DECODE (page_id, 1, 1)) pv_main,
         COUNT (DECODE (page_id, 2, 1)) pv_service_reg,
         COUNT (DECODE (page_id, 3, 1)) pv_eating,
         COUNT (DECODE (page_id, 4, 1)) pv_shopping,
         COUNT (DECODE (page_id, 5, 1)) pv_culture,
         COUNT (DECODE (page_id, 6, 1)) pv_entertainment,
         COUNT (DECODE (page_id, 7, 1)) pv_detail_coupon,
         COUNT (DISTINCT DECODE (page_id, 1, mdn)) uv_main,
         COUNT (DISTINCT DECODE (page_id, 2, mdn)) uv_service_reg,
         COUNT (DISTINCT DECODE (page_id, 3, mdn)) uv_eating,
         COUNT (DISTINCT DECODE (page_id, 4, mdn)) uv_shopping,
         COUNT (DISTINCT DECODE (page_id, 5, mdn)) uv_culture,
         COUNT (DISTINCT DECODE (page_id, 6, mdn)) uv_entertainment,
         COUNT (DISTINCT DECODE (page_id, 7, mdn)) uv_detail_coupon
    FROM page_view_tbl
   WHERE access_date >= TO_DATE ('201008', 'YYYYMM')
     AND access_date < LAST_DAY (TO_DATE ('201008', 'YYYYMM')) + 1
GROUP BY ROLLUP (TO_CHAR (access_date, 'DD'))

access_date 컬럼이 DATE 타입으로 되어있고, 해당 컬럼에 non-unique 인덱스가 생성되어 있는데도,

index 스캔을 하지 못하고 테이블 full scan 을 하고 있습니다.

 

잘못된 쿼리문이 존재하는지 답변 부탁합니다.;;

 

 

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

데이터가 얼마나 쌓여있는지 모르겠지만

날짜범위를 하루나 이틀정도로 줄여서 실행했을땐 인덱스를 탄다면

데이터 분포도의 문제겠네요.

김프로(kimpro)님이 2010-08-16 18:31에 작성한 댓글입니다.

인라인뷰로 먼저 데이터를 가져오신후 조각내보세요.

 

group by에서 rollup 해줄때 to_char를 사용하고 계시네요.

 

컬럼에 대한 형변환등은 index 를 사용하지 못하게 한다라고 배웠지 말입니다.

암비님이 2010-08-17 09:08에 작성한 댓글입니다. Edit

select * 

  from page_view_tbl

where access_date >= to_date('201008', 'YYYYMM')

 and access_date < last_day(to_date('201008', 'YYYYMM')) + 1 

 

201008월에 해당하는 데이터가 한 건 만 있는데도 인덱스 스캔이 이루어지지 않고 있으며,

인라인뷰로 데이터를 먼져 가져오고 싶어도 위의 쿼리문 조차 인덱스 스캔을 하지 못하니 답답할 따름입니다.

what님이 2010-08-17 18:01에 작성한 댓글입니다. Edit

해당 컬럼이 Date 타입인가요? 인덱스 선두컬럼인가요?

맞는데 안탄다면???

통계정보라도 한번 수집해 보시구요.

힌트도 한번 줘보세요.

 

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

마농님 답변 감사합니다.

HINT 를 사용하니 인덱스 스캔이 정상적으로 이루어 지고 있습니다..;;

 

그나저나 이상한 점은 힌트를 주기 전, 왜 인덱스 스캔을 하지 못하였는지네요..;;; 

what님이 2010-08-18 12:39에 작성한 댓글입니다. Edit

통계정보가 틀려서 그럴수도 있으니 통계정보 수집도 해보세요.

마농(manon94)님이 2010-08-18 12:52에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
37861서브쿼리 Vs 조인 [2]
초보
2010-08-16
5865
37860쿼리좀 봐주세요.. [1]
K씨
2010-08-16
3277
37859두 날짜 컬럼을 기간별로 조회하는 쿼리가 어떻게 될까요? [2]
정태영
2010-08-16
3409
37858index scan 이 되지 않고 있습니다. [6]
what
2010-08-16
4240
37857리플 관련 간단한 질문 드립니다 [2]
ㄱㄱㄱ
2010-08-16
2817
37856SERVICE_NAME에 Database 명을 입력하면 되나요?
용세중
2010-08-16
2525
37855쿼리질문...세로데이타..가로로나타내기... [2]
김옥희
2010-08-16
3790
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다