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 39291 게시물 읽기
No. 39291
IN조건에 select사용시 INDEX를 못탑니다
작성자
김종구
작성일
2012-02-13 21:15
조회수
3,930

안녕하세요 INDEX  쿼리 문의드립니다.

우선 컬럼 AAA에 INDEX가 걸려 있습니다.

AAA IN ('111','222') 이렇게 조건을 줄경우 인덱스가 잘 탑니다.

AAA IN ( SELECT BBB FROM TABLE B )  이렇게 조건을 줄경우 인덱스를 못탑니다.

SELECT BBB FROM TABLE B  --> 요쿼리의 값은 '111','222'로 위의 인덱스 타는 쿼리의 결과 값과 같습니다.

AAA 와 B.BBB는 VARCHAR2 로 타입이 같습니다. 그리고 B.BBB도 인덱스가 걸려있습니다.

 

INDEX 지정도 해보고 이리저리 해메다 도움요청드립니다. ㅠ

큰실수를 한건가요? 아님 원래 요렇게 하면 인덱스를 못타나요

많은 조언 부탁드립니다.

수고하세요

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

 exists 구문으로 변경해서 사용하셔야 될거 같습니다.

 

실행PLAN 단계에서 IN 구문내에 몇개가 나올지 판단이 안되는 경우 full table scan을 하도록 PLAN이 만들어 질 수 있습니다(통계 생성이 잘못되었거나, 또는 B TABLE의 건수가 많거나..).

 

exists(select 1 from table b where b.bbb = aaa)  로 변경해보시기 바랍니다(IN 보다는 exists가 빠릅니다).

 

꼭 IN을 사용해야 한다면 힌트를 줘서 인덱스를 타게 하는 방법도 있습니다.

viatoris님이 2012-02-14 17:40에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39294조회조건에 없더라도 하나의 컬럼은 가져올 수 있는 방법 문의 드려요 [2]
이환진
2012-02-15
4046
39293[질문] 범위 데이터를 ROW로 펼치기 쿼리..... [1]
호빵
2012-02-14
4080
39292v$session의 process 정보가 null인 경우는 뭔가요?
강원식
2012-02-14
3411
39291IN조건에 select사용시 INDEX를 못탑니다 [1]
김종구
2012-02-13
3930
39290특정기간 특정요일 갯수 구하기 질문 ㅠ.ㅠ [3]
진희
2012-02-13
5985
39289스키마 생성시 no logging에 대한 궁금증 [1]
슬라임
2012-02-13
3271
39288rollup작업중에 막히네요....^^ [4]
빨간운동화
2012-02-13
4818
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다