join & view

DB/Common 2012. 4. 10. 15:14

view와join의 차이점

view와join의 차이점이라..질문자께서 잘못알고 계시는데 view는 테이블이 아닙니다..view는 그 뷰쿼리문이 데이타 딕셔너리에 그대로 저장되어 있는텍스트입니다. 
예를 들어 select * from tab1 a, tab2 b where a.col1 = b.col1 이란 조인쿼리문이나 
create view test_view as 
select * from tab1 a, tab2 b where a.col1 = b.col1 으로 뷰를 만들어 
select * from test_view한거나 위에 쿼리문 select * from tab1 a, tab2 b where a.col1 = b.col1 나 똑같다는거죠. 옵티마이져가 쿼리를 실행시 쿼리변형을 일으켜서 select * from test_view 이 쿼리를 select * from tab1 a, tab2 b where a.col1 = b.col1이렇게 만들어주는거죠 이외에 복잡한 사항이 많은데 엔코아에서 나온 새로쓴대용량데이타베이스를 권해 드리고 싶네요 그책에 자세히 나와 있습니다.


출처 - http://www.okjsp.pe.kr/seq/102596

===================================================================================


VIEW와 JOIN은 어떤걸 사용해야 할까요?

view와 join중 어느것이 빠른지 궁금합니다.

 

프로그램시 join을 해서 select할 경우는 필요한 컬럼만 조건에 맞춰서 가져오면 되는데

view는 우선 join으로 가상의 테이블을 만들어서 데이터를 가져오고

그 view를 다시 select를 하거나 조건을 또 한번 줘서 필요한 부분을 뽑아서 select를 하잖아요...

그러면 view가 느린거 아닌가요?

 

예)

조인은 아래와 같이

 

SELECT a.name, a.id, b.addr

   FROM A a, B b

 WHERE a.seq = b.seq AND a.seq = 1;

 

조건까지 한번에 가져오지만

 

 

VIEW는

 

CREATE OR REPLACE VIEW V_AB

(seq, id, name, addr)
AS

SELECT a.seq, a.name, a.id, b.addr

   FROM A a, B b

 WHERE a.seq = b.seq

 

V_AB 가 한번 join해서 가져오고

이 거져온 view를 통해서 아래와 같이

 

SELECT name, id, addr

   FROM  V_AB

 WHERE seq = 1

 

다시 조건을 줘서 가져오면 view가 더 느린게 아닐까 하는게 제 생각입니다.

 

물론 위에든 예는 간단한거라 그리 상관없겠지만

정말 많은 조인이 일어나고 많은 조건이 있거나 VIEW를 생성하는 과정에서 많은 sub query가 존재 한다면 어떻게 될까요?.

제가 생각하고 있는게 맞는건가요?



안녕하세요. 강남이입니다.

결론부터 말씀드리면 일반 조인 문장을 쓰는 쪽이 빠릅니다.

 

뷰를 사용하는 이유는 크게

1. 보안

2. 편의성

때문입니다.

 

흔히 조인 문장을 뷰로 만들어 사용하는 이유는 위의 두가지 이유 중 두번째인

편의성 때문입니다.

따라서 뷰에 조인문장을 저장한다고 해서 속도 등의 변화가 생기지는 않습니다.

 

다만 조인 문장을 뷰에 저장했다가 실행한다면

뷰에 있는 문장을 풀어내는 시간이 추가적으로 더 필요하겠지요?

 

좋은 답변이 되었기를 바랍니다. 그럼^^


출처 - http://k.daum.net/qna/view.html?qid=4GKW6&aid=4GLp2


=======================================================================


조인 테이블 쓰는 것과 view 테이블 쓰는것중에 어는것이 더 효율적인가요


먼저 관계형 데이터베이스시스템을 제작할 때에는 성능 문제를 가장 중요하게 생각하게 됩니다.
데이터 모델링을 잘하기 위해서 정규화에 신경쓰고,
SQL문을 최적화(Optimizing)해서 사용하기 위하여 옵티마이저의
특성에 맞게 SQL문을 작성하게 되며,
인덱스 등의 데이터베이스 액세스 매커니즘을 연구하여 상황에
맞는 최적의 SQL 실행계획을 수립하게 됩니다.
성능 튜닝 유틸리티를 공부하시면 도움이 될 것입니다.

이렇게 하는데에 있어서 성능관련 문제점을 해결하는 규칙이 있는데 Trade-Off 또는 Plus Sum Game이라는 규칙이 있습니다.
어떤 문제를 푸는데에 절대적인 방법은 없고, 항상 이점과 단점이 존재하므로 양쪽을 감안하여 최적의 해결방안을 선택해야 한다는 것입니다.

따라서 질문하신 내용에 대한 답변은 특정한 SQL문을 단순한 테이블 조인을 거쳐 결과가 산출되는 경우와, View를 사용하여 결과가 산출되는 경우의 성능을 비교하여 사용하는 것이 정답일 것입니다.

대부분은 테이블 조인이 너무 자주 발생하여 성능에 문제가 발생할 때 View(인라인 뷰를 포함)를 사용하면 상당한 도움이 됩니다.
또한 뷰는 정보은닉 등과 같은 장점을 많이 가지고 있으므로,
뷰의 특성을 자세히 기술한 기본 설명들을 참조하시기 바랍니다.

인라인 뷰를 사용하였을 특정한 경우를 제외하고는 뷰의 단점은 크게 경험을 하지 못했는데, 뷰를 사용하지 않고도 목표 성능을 낸다면 사용하지 않는 것이 최선일 것입니다.


출처 - http://k.daum.net/qna/view.html?qid=4GKql













Posted by linuxism
,