조건절에 like 와 case 질문

개린이 2020.04.10 15:37 Views : 1139

db초보입니다..ㅠㅠ

화면에서 전체 데이터 검색 하는게 가능하면 쿼리를 like로 써왔는데 다른 분들 쿼리 작성하는거 보니까 case로 하시는 분들이 있으시더라구요.

60만건의 데이터를 like와 case로 각각 실행해봤을때 실행시간은 동일했습니다.

근데 인터넷에 찾아보니까 case를 조건절로 작성하게되면 인덱스 사용이 안된다거나, 매번 조회할때마다 실행 계획을 세우기때문에 안좋다는걸 봐서 (제가 이해를 잘못한걸지도..)

어느 방식(?)으로 쿼리를 작성하면 좋을지..

셋다 어느 방식으로해도 조회 성능(?)에는 상관이 없는지.. 

궁금하여 여기에 질문글을 납깁니다..


1.  (like의 경우 null이 허용된 컬럼이라면 isnull(컬럼,'') like @Param +'%' 이렇게 작성했습니다..)

select  *

from  테이블 (nolock)

where 컬럼1 like @Param1 + '%'

and  컬럼2 like @Param2 + '%'

and  컬럼3 like @Param3 + '%'

and  컬럼4 like @Param4 + '%'  

and  컬럼5 like @Param5 + '%'


2. 

select  *

from  테이블 (nolock)

where (CASE WHEN @Param1 = '' THEN '' ELSE 컬럼1 END) = @Param1

and  (CASE WHEN @Param2 = '' THEN '' ELSE 컬럼2 END) = @Param2

and  (CASE WHEN @Param3 = '' THEN '' ELSE 컬럼3 END) = @Param3

and   (CASE WHEN @Param4 = '' THEN '' ELSE 컬럼4 END) = @Param4

and  (CASE WHEN @Param5 = '' THEN '' ELSE 컬럼5 END) = @Param5


3.  

select  *

from   테이블 (nolock)

where (CASE WHEN @Param1 = '' THEN '1' ELSE 컬럼1 END)

 = (CASE WHEN @Param1 = '' THEN '1' ELSE @Param1 END)

and   (CASE WHEN @Param2 = '' THEN '1' ELSE 컬럼2 END)

 = (CASE WHEN @Param2 = '' THEN '1' ELSE @Param2 END)

and   (CASE WHEN @Param3= '' THEN '1' ELSE 컬럼3 END)

 = (CASE WHEN @Param3= '' THEN '1' ELSE @Param3END)

and  (CASE WHEN @Param4 = '' THEN '1' ELSE 컬럼4 END)

 = (CASE WHEN @Param4  = '' THEN '1' ELSE @Param4 END)

and   (CASE WHEN @Param5 = '' THEN '1' ELSE 컬럼5 END)

 = (CASE WHEN @Param5 = '' THEN '1' ELSE @Param5 END)

No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 1060
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 1666
10576 max 조건 질문입니다. [2] 상찝 2020.04.22 590
10575 Oracle DB table에 update 결과 [1] kuai 2020.04.17 550
10574 SQL Server 구성 관리자 에이전트실행 실패문제입니다 [1] 영혼까지털리고싶냐 2020.04.16 523
10573 서버 교체를 하려 하는데 jdbc 버전관련 문의드립니다. [1] 늘새내기 2020.04.13 610
» 조건절에 like 와 case 질문 [5] 개린이 2020.04.10 1139
10571 쿼리로 다음 소스코드를 만드려면 어떻게 해야할까요?? 초본데 오늘까지 알아야해서 부탁드립니다 ㅠㅠ [1] 강냉 2020.04.08 4318
10570 특수문자를 빈문자로 인식하는 문제. 코코 2020.04.08 889
10569 TLS1.2 관련 질문입니다. tlzkvpdjqlxk 2020.04.07 505
10568 mssql 저장프로시져 질문입니다! [1] sonic817 2020.04.07 560
10567 쿼리문 문의 드립니다. sqlchojja 2020.04.06 1251
10566 쿼리 관련해서 질문 드려요 [3] 훼이커 2020.04.02 742
10565 두 select 문의 결과 합치기 [3] 페드로2000 2020.03.31 903
10564 mssql 필드값 붙이기 쿼리 문의 [1] 객잔지기 2020.03.30 589
10563 프로시져 매개변수를 mybatis처럼 이용할수 있나요? [2] 우라누스 2020.03.29 582
10562 150만건 인서트에 대한 문의 LDF 파일 쓰기 속도 곰네 2020.03.28 850
10561 MSSql Read Write 분리 가능한가요? [1] Forenty 2020.03.26 742
10560 레코드를 여러번 반복 출력 하려고 합니다... [2] 삼미슈퍼스타 2020.03.25 1131
10559 IDENTITY의 증가관련 질문 [2] 쏠남 2020.03.25 597
10558 LIKE절의 형태에 대한 질문입니다. bctr 2020.03.22 529
10557 고정된 숫자값을 insert할때마다 늘리고 싶습니다... [1] yotaggu 2020.03.20 625





XE Login