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
운영게시판
최근게시물
Sybase Q&A 4022 게시물 읽기
No. 4022
구문 오류인지 확인 부탁 드립니다.
작성자
spectra
작성일
2010-04-13 15:41
조회수
6,737

변수로 들어 오는 문자열을 substring으로 잘라낸후  "%"  문자를 붙여서

like 로 비교하는 구문인데 예상과 다르게 그냥 table full scan 을 타버리더라구요.

begin

declare @wedi_cd   varchar(09)
select @wedi_cd = 'M0111'

select a.edi_cd   
from hb_edi_detail a

where a.edi_cd   like  substring(@wedi_cd, 1, 5) + "%'"

end

hb_edi_detail  테이블에 edi_cd 컬럼으로 인덱스는 생성 되어 있으며 강제로 인덱스를 지정해두면 인덱스 full scan 현상이 일어나 어찌되든 i/o가 많이 발생 하더라구요

where a.edi_cd   like  substring(@wedi_cd, 1, 5) + "%'" 이 문장이

where a.edi_cd   like  'M0111%' 처럼 동작하길 기대 하는데 왜 안될까요..ㅜ.ㅜ;;

 

 

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

where a.edi_cd   like  substring(@wedi_cd, 1, 5) + "%'"

 

보통 , query를 파싱할때 이 구문은 된다 안된다.를 판별하게 되는데,

 

해당 구문을 잘라버리는 substring이라는 함수를 미리 적용되는 구문으로 판별되므로

인덱스를 잘라버리면, 인덱스가 올바르지 않기에 인덱스를 타지 않게 된다고 판별하게 됩니다.

select @wedi_cd = substring(xxxx,1,5)

로 미리 만들고

where a.edi_cd   like  @wedi_cd

 

로 하는게 어떨까요?

 

refeel님이 2010-04-13 18:50에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4025쿼리문 좀 도와주세여..ㅠㅠ [1]
김동한
2010-04-23
6144
4024sybase에서 한글외에 일본어 중국어까지 지원하려면.. [1]
음..
2010-04-21
6751
4023BCP 오류 문의. [1]
현승
2010-04-20
6461
4022구문 오류인지 확인 부탁 드립니다. [1]
spectra
2010-04-13
6737
4020sql 보안 관련 해서 문의 드릴께요 ^^;;
덕군
2010-04-13
6181
4019ASE 12.5.3 입니다. view 테이블 count 쿼리가 왜이렇게 느릴까요?
박찬구
2010-04-12
6547
4018substring으로 잘라 낸후 like로 비교 구문 질문입니다. [1]
ㅇㅇ
2010-04-07
7369
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다