WHERE절 조건 사용에 따른 속도차이 문의드립니다. 0 1 1,779

by 개발뉴비 [SQLServer] #SQL SERVER #WHERE절 #OR조건 #EXISTS #UNION ALL [2017.11.15 14:00:43]


/*
WHERE절 조건에서 OR 조건을 사용하는 것과 EXISTS 문에 UNION ALL을 사용하여 조회하는 것이 속도에 어떤 영향이 있는지 궁금해서 문의드립니다.
아래와 같은 다른 형태의 WHERE조건 사용시 속도차이가 많이 날까요?
*/
-- EX 1)
SELECT * FROM table_1 t1
 WHERE ( (p_text = '') OR
         (p_text = '1' AND t1.col_1 = 'a') OR
         (p_text = '2' AND t1.col_1 = 'b' AND t1.col_2 = '*') )

-- EX 2)
SELECT * FROM table_1 t1
 WHERE EXISTS (
			SELECT 1 WHERE p_text_ = ''
			UNION ALL
			SELECT 1 WHERE p_text = '1' AND t1.col_1 = 'a'
			UNION ALL
			SELECT 1 WHERE p_text = '2' AND t1.col_1 = 'b' AND t1.col_2 = '*' 
		)

 

by 마농 [2017.11.15 16:49:32]

제 생각에 최적은
(col_1 + col_2) 인덱스가 있고
p_text 가 입력 되느냐 안되느냐에 따라 실행계획이 두가지로 분리되는 것입니다.
 1. p_text 가 입력 안되면 : 테이블 풀스캔
 2. p_text 가 입력 되면 : 인덱스 스캔
실행계획을 직접 확인 비교해 보셔야 합니다.
그리고 테스트는 위와 같이 조건을 직접 주고 하는 것이 아니라
바인드 변수를 사용하여 테스트해야 할 듯 하네요.

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