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 37240 게시물 읽기
No. 37240
건수가 적은 테이블의 Full Scan 속도에 관하여...
작성자
아바타
작성일
2010-01-20 17:22ⓒ
2010-01-20 17:26ⓜ
조회수
3,532

[화면에 조회조건이 (B, C, D, E) 4개 있습니다.]
조회조건이 1~4개까지 들어오는 상황이라
NVL을 사용해서 하나의 쿼리에서 다 사용할 수 있게 하였습니다.

============================================================
[TEST](총 117건)
A(PK)
B
C
D
E
============================================================
SELECT /*+index (TEST TEST_PK) */
    count(1) as CNT
FROM   rcpt_plan 

WHERE
 B = NVL(:I_B,B)
AND C LIKE '%'||NVL(:I_C,C)||'%'
AND D = NVL(:I_D, D)
AND E = NVL(:I_E, E)
============================================================

그런데 문제점이 속도가 엄청나게 차이가 난다는 것입니다.
[WHERE절을 뺄 경우]
Index Full Scan으로 인하여 63msec가 나왔습니다.

[WHERE절이 있을 경우]
Table Access Full로 인하여 3sec가 나왔습니다.

117건 밖에 안되는 상황인데 Table Access Full이 난다 하더라도
빨리 나와야 되는게 아닌가요;; 전 도무지 이유를 모르겠습니다.

[WHERE절이 있는 경우]는 힌트를 줘도, A=A라는 PK조건을 줘도
Table Access Full가 나옵니다.

왜 그런지 알 수 있을까요??

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

컬럼 타입이 뭔가요?

117건이면 제가 생각할때 INDEX 안타도 상관없을듯 싶은데요

 

김홍석(piskef)님이 2010-01-20 19:27에 작성한 댓글입니다.

답변 감사드립니다.

컬럼타입은 전부 varchar2 입니다.

근데 의아스러운건 117건이라 풀스캔 일어나도 속도가 빨라야 되는데 3초나 걸리는게;; 왠지 모르겠습니다.

아바타님이 2010-01-21 00:21에 작성한 댓글입니다.
이 댓글은 2010-01-21 00:22에 마지막으로 수정되었습니다. Edit

조건으로 주어지는 항목들이 인덱스항목과 무관하다면

인덱스 스캔은 무의미하며 풀스캔이 오히려 좋습니다.

인덱스 컬럼이라 하더라도 위와 같은 조건으로는 컬럼을 가공했으므로 인덱스를 탈 수 없습니다.

인덱스를 타게 하려면 LIKE 를 사용하세요. b LIKE :i_b || '%'

조회 컬럼 자료중에 널값이 존재한다면 조회조건이 주어지지 않았을 경우 모든자료(널값 포함)가 나와야 하지만 위와 같은 조건으로는 널값이 나오지 않습니다.

널값은 비교할수 없기 때문입니다.

물론 널값이 존재하지 않는다면 상관은 없고요.

좀 복잡하지만 (:i_b IS NULL OR b = :i_b) 하시면 조회조건값이 들어오지 않을 경우 모든 자료가 조회됩니다.

117건밖에 되지 않는 테이블의 조회속도가 느리다면??

이는 테이블의 자료가 많이 삭제되어서 그렇습니다.

삭제된 공간이 테이블을 차지하고 있어서 그렇습니다.

해결방법은 테이블을 재생성해주시는 방법..

마농(manon94)님이 2010-01-21 09:14에 작성한 댓글입니다.

김홍석님, 마농님 답변 감사드립니다.

정말 좋은 것 많이 배워갑니다.

진심으로 존경합니다. _(_._)_

 

P.s 테이블의 자료가 많이 삭제 된게 맞았습니다.

 전에 테스트 한다고 20만건을 임의로 넣었다가 삭제한 적이 있었어요. 감사합니다.

아바타님이 2010-01-21 10:06에 작성한 댓글입니다.
이 댓글은 2010-01-21 10:08에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
37243Oracle + 아파치 + php 설치 아르바이트 구합니다.
최진성
2010-01-21
2553
37242SQL 과 ORACLE 의 DB LINK
질주본능
2010-01-20
2706
37241종료일자가 없을시 특정일자로 select하는 방법알려주세요^^;;; [1]
궁금이
2010-01-20
2516
37240건수가 적은 테이블의 Full Scan 속도에 관하여... [4]
아바타
2010-01-20
3532
37239질문 요청 합니다 . [1]
금현
2010-01-20
2626
37237쿼리질문입니다. [1]
개구쟁이
2010-01-20
2886
37236접속한 아이디(스키마) 알아내는 방법이 있나요? [2]
이성민
2010-01-20
2983
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다