데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

조건절에 like 와 case 질문

개린이 2020.04.10 15:37 Views : 1012

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
10588 SQL 서버 user cal 수와 접근 컨넥션의 관계 질문드립니다. [1] lyn1216 2020.05.21 320
10587 SQL 초보입니다 살려주세요 [1] 마이노키 2020.05.21 371
10586 datepart 로 연도별 월 카운트를 하려고합니다 [1] zkdkdktm 2020.05.20 327
10585 다국어 버전 DB 질문 [2] 장어 2020.05.12 617
10584 SELECT 와 SP를 사용했을떄 속도 차이가 큰가요? [2] 마에스트로 2020.05.08 482
10583 MSSQL 관리자 교육 과정 추천 부탁드립니다. [1] dlghksdn 2020.05.08 431
10582 한 행에 있는 값들을 가져오고 싶습니다. [1] ater 2020.05.07 423
10581 극초보 질문입니다 김삐로링 2020.05.01 615
10580 데이터베이스 메일 설정 오류 성지 2020.04.29 464
10579 mysql 조건문 질의합니다. 상찝 2020.04.27 377
10578 MSSQL 통계쿼리 질문입니다..ㅠ.ㅠ [1] 안느끼74 2020.04.24 574
10577 MySQL 쿼리문 질의 [3] 상찝 2020.04.23 583
10576 max 조건 질문입니다. [2] 상찝 2020.04.22 446
10575 Oracle DB table에 update 결과 [1] kuai 2020.04.17 457
10574 SQL Server 구성 관리자 에이전트실행 실패문제입니다 [1] 영혼까지털리고싶냐 2020.04.16 453
10573 서버 교체를 하려 하는데 jdbc 버전관련 문의드립니다. [1] 늘새내기 2020.04.13 561
» 조건절에 like 와 case 질문 [5] 개린이 2020.04.10 1012
10571 쿼리로 다음 소스코드를 만드려면 어떻게 해야할까요?? 초본데 오늘까지 알아야해서 부탁드립니다 ㅠㅠ [1] 강냉 2020.04.08 2852
10570 특수문자를 빈문자로 인식하는 문제. 코코 2020.04.08 663
10569 TLS1.2 관련 질문입니다. tlzkvpdjqlxk 2020.04.07 446





XE Login