WHERE 절에서 CASE 구분 사용시 index 0 1 1,205

by 슬기파파 [SQL Query] case index [2022.02.10 11:23:51]


MSSQL 쿼리에서

@Type = 0 일 경우 전체 검색
@Type = 1 일 경우 특정필드 is null 검색
@Type = 2 일 경우 특정필드 is not null 검색

을 하려고 하는데, case 구문으로 하려고 합니다.

IF, ELSE IF , ELSE IF 로도 가능은 한데, 쿼리가 너무 길어져서 줄이려고 하는데, 1 = CASE 구문응용으로 index 부분 까지 제대로 타는지 문의 드립니다. 

where                               
    1 = CASE When @Type = 0 THEN 1 
                 WHEN @Type = 1 AND 특정필드 is null THEN 1 
                 WHEN @Type = 2 AND 특정필드 is not null THEN 1 
                 ELSE 0
                 END

by 마농 [2022.02.10 12:30:36]

인덱스가 유용할 때가 있고, 그렇지 않을 때도 있습니다.
현재 상황에는 인덱스가 유용하지 않습니다.
성능과 무관하게 쿼리만 간결하게 바꿔보면.
 

SELECT *
  FROM t
 WHERE (@Type = 0)
    OR (@Type = 1 AND 특정필드 IS NULL)
    OR (@Type = 2 AND 특정필드 IS NOT NULL)
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입