안녕하세요..게시글은 처음 써보는거 같네요^^;
DB/프로그램 다 야매로 배워서..(나는 사수가 없어..ㅠ.ㅠ)
(인터넷이 가장 큰 저의 스승이라는-_-;;;)
틈이 날때마다 조금씩 독학해나가고 있는데요.
이런 경우 성능이 어떤게 좋은지 궁금합니다.
시나리오)
1. 문자값이 들어가 있는 컬럼이 존재함. ( 이하 A 테이블. AA컬럼 이라고 지칭함 )
2. Where 조건절에서 AA 컬럼으로 조건을 걸 경우
1) Where A.AA Like '%ABC%
2) Where A.AA CHARINDEX('ABC',A.AA) <> 0
Like 와 CHARINDEX 중 어떤게 더 성능이 좋은지..
차이가 난다면 어떤 이유로 인해 차이가 발생을 하는지 궁금합니다.
구글링을 통해서 대략적으로 파악해본 결과
Like 가 더 좋을 것이다.
( SQL 내부적으로 사용되는 함수들보다는 표준 DML 구문인 Like 가 Index Scan 시 조금더 유리할 가능성이 있다 로 귀결되는듯 )
라는 쪽으로 의견이 모여지는 형태더라구요..^^
답변에 미리 감사드립니다.
조금 늦은 감이 있지만,
새해복 많이 받으세요~~!!
Comment 5
-
이리
2016.01.06 15:13
-
Terry
2016.01.06 15:17
그런 방법이!!
실행 계획을 보는 방법은 알지만
실제 활용을 해본 경험이 거의 전무했던지라..
미처 거기까진 생각이 미치지 못했었네요..
좋은 말씀 감사드립니다^^
-
Terry
2016.01.07 14:06
실행계획으로 테스트 해보니
Like 가 조금 더 좋은 효율이 나오네요..
실행계획 보는 방법도 좀 공부해야될듯하고..
해야할게 많네요 ㅡ,.ㅜ
혹시나 해서 테스트에 사용했던 쿼리 올려둡니다.
---쿼리시작---
/*
DROP TABLE #tblCREATE TABLE #tbl
(
data char(100) not null
,seq decimal(18,0) not null
)create nonclustered index idx on #tbl (data)
--create index idx2 on #temp_bom_expand (part)
*/;WITH tblA(seq) As
(
Select 1
)
,tblB(data,seq) As
(
Select Convert(varchar(max),'1')
,a.seq
From tblA a
Union All
Select Convert(varchar(max),newid())--a.seq + 1)
,a.seq + 1
From tblB a
Where a.seq + 1 < 500000
)
insert
into #tbl
Select a.*
From tblB a
OPTION (MAXRECURSION 0)
Select a.*
From #tbl a
Where a.data Like '%ABCDEFGHIJKLMN%'Select a.*
From #tbl a
Where charindex('ABCDEFGHIJKLMN',a.data) <> 0
---쿼리끝--- -
minsouk
2016.01.07 15:07
성능 검토는 profiler 에 잡힌 실제 duration, cpu time, logical read, physical read 로 판단하는 겁니다.
실행계획은 걍 예측 입니다.
-
Terry
2016.01.07 22:33
공부할게 많네요~~^_^
알려주신 정보를 토대로 조금씩 독학해봐야겠어요.
좋은 말씀 감사합니다^^
실행 계획으로 한번 비교해 보시는건 어떨지요