WHERE 매개변수 조건. 0 6 3,247

by 한번사는인생 [SQLServer] [2023.11.15 09:52:40]


AND (
                (@IsOption = 5 AND XXXXXX)
                OR
                (@IsOption = 0 AND XXXXXX)
                OR
                (@IsOption = 1 AND XXXXXX)
                OR
                (@IsOption = 2 AND XXXXXX)
                OR
                (@IsOption = 3 AND XXXXXX)
                OR
                (@IsOption = 4 AND XXXXXX)
                OR
                (@IsOption = 6 AND XXXXXX)
            )

WHERE 조건에 위에와 같이 @IsOption 매개변수에 따라서 조인되어져 있는 값을 가지고 비교하는 구문이 있습니다.

저는 매개변수를 가지고 이렇게 처리하는 경우가 많은데, 해당 조건절이 저는 이미 조회된 데이터를 기반으로 조건만 처리하는 것으로

속도에는 문제가 되지 않는다고 생각했습니다.

이렇게 하면 속도에 문제가 될까요?

더 좋은 방법이 있는지 궁금합니다!

by 마농 [2023.11.15 11:01:23]

각 조건마다 최적의 실행계획이 각각 다를 것입니다.
하지만 이와 같이 OR 를 사용하면
각각의 최적의 실행게획이 아닌 통합 실행계획을 타게 될 것입니다.
성능 향상을 위해서는 각각의 쿼리로 분기시키는 것도 한 방법입니다.


by 한번사는인생 [2023.11.15 11:45:30]

IF @IsOption = 1 BEGIN

END

IF @IsOption = 2 BEGIN

END

...

 

이런 방식으로 말씀하시는거죠?


by 마농 [2023.11.15 13:11:44]

네 아예 여러개 쿼리문으로 분기시키는 방법도 있고
하나의 쿼리로 UNION ALL 처리하는 방안도 있습니다.
동적쿼리로 조건절만 바꾸는 방안도 있구요.


by 한번사는인생 [2023.11.15 13:40:40]

하나의 쿼리로 UNION ALL 처리하는 방안도 있습니다.

이말씀은.

제가 말한 조건도 있는데, 그 조건으로 먼저 조회를 해서 임시테이블에 담아서

그 임시테이블을 조건별로 조회해서 UNION ALL 하면 될까요?

 

항상 다양한 면으로 알려주셔서 고맙습니다.


by 마농 [2023.11.15 15:07:23]

글쎄요? 임시테이블에 대한 의견을 제시한 적은 없는데요?


by 한번사는인생 [2023.11.15 15:10:42]

ㅎㅎㅎ;;

여러개 조건이 있으면 UNION 하는 곳마다 조건을 중복으로 조회할 것 같아서 임시테이블에 넣는 생각을 하였습니다.

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