IN 이 여러개 있는 VIEW를 쪼개서 관리하는건 어떨까요?? 0 4 1,514

by 꾼이되자 [2009.06.02 13:54:07]


제목과 같이 VIEW안에 과일 IN('사과','딸기','참외','수박','포도') 가 조건절인 VIEW가 있습니다.

그런데....

SQL1) 조건절 : WHERE 과일 = '사과'

SQL2) 조건절 : WHERE 과일 = '딸기'

SQL3) 조건절 : WHERE 과일 = '참외' .... 이런식으로 사용하고 있습니다.

제가 알기론 VIEW에서 사용했던 IN절은 옵티마이져가 OR절로 인식하여 UNION ALL로 푼다고 알고 있는데요...^^(맞나요???)

제 생각엔 저 VIEW하나를 5개의 VIEW로 쪼개서 관리하는게 맞는거 아닌가 싶어서 문의합니다.

이렇게요....

VIEW1) 과일 = '사과'     =======>  SQL1에서 WHERE절 조건절 없어짐

VIEW2) 과일 = '딸기'     =======> SQL2에서 WHERE절 조건절 없어짐......

이렇게 사용하면 되지 않을까 싶은데요....

VIEW를 위와같이 여러개로 쪼개서 관리하면 관리하기도 조금은 힘들겠지만 그래도 저렇게 하는것이 속도에도

빠르지 않을까 해서요....

실제로 IN 과 =로 VIEW를 만들었을때 속도의 차이는 대단합니다...

어떻게 하는게 좋을까요 ^^*

 

by 박민석 [2009.06.02 14:08:17]
과일에 대해서 항상 한가지만 검색하는 거라면 차라리
VIEW 에서 과일 IN('사과','딸기','참외','수박','포도') 이부분을 삭제 해버리시구요.
VIEW검색시
SELECT * FROM VW_TABLE WHERE 과일 = '사과';
이런식으로 하는게 좋을 듯한데요..
굳이 VIEW 를 나눠서 관리할 필요도 없어 보이네요..

그런데 VIEW 에 과일 IN('사과','딸기','참외','수박','포도') 이러한 조건이 들어 가 있다는 것은 어디에선가 5개의 과일로만 검색되는 부분이 있어서 그렇게 한것이 아닐까요? 그렇지 않은 경우에는 필요가 없어 보이는데요~~ ^^

by 꾼이되자 [2009.06.02 14:35:41]
답변 감사드립니다 ^^
제가 실수로 빠뜨린 내용이 있네요...
과일이라는 컬럼은 INDEX가 걸려있는 컬럼이네요^^
그래서... 이부분을 빼면 속도가 느려요~~

그리고 어떠한 SQL문에서 5개의 과일로만 검색되는 부분은 없습니다 ^^

by 마농 [2009.06.02 15:46:12]
뷰의 쿼리가 단순 셀렉트라면 뷰에대한 조건이 뷰 안으로 파고들어 실행되기 때문에 인덱스 스캔하는데 문제가 되지 않습니다.
따라서 뷰 안에 조건을 또 줄 필요가 없는 것입니다.
뷰 안에 조건을 In으로 주었다고 하더라도 실제 수행할때는 뷰 밖에서 준 조건을 우선시하여 다섯개의 과일을 모두 읽지는 않습니다.
그러나 단순 쿼리가 아닌 그룹함수가 쓰이거나 인라인 뷰의 깊이가 깊게 처리된 쿼리의 경우엔 뷰 밖의 조건이 뷰 안으로 파고들어 인덱스 스캔을 하는데 문제가 발생할수는 있습니다.

by 꾼이되자 [2009.06.02 18:02:14]
그렇군요...
확인한번 해보고 사용잘 하겠습니다.
감사합니다
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입