#title 연결 액세스 분석 [[TableOfContents]] ==== 개요 ==== 현재 대부분의 DBMS 제품은 관계형 혹은 객체-관계형이다. 관계형 모델은 개체와 개체간의 관계, 개체집합과 개체집합간에도 관계를 가짐으로써 서로 연결되어 보다 많은 정보를 만들 수가 있는 장점이 있다. 연산도 개체집합간의 관계연산이 대부분이다. 그러므로 '연결'이라는 것은 매우 중요하다. 간혹 JOIN[* JOIN은 연결의 부분집합이지 전체가 아니다.]으로 인해 느리다는 불평을 늘어 놓는 사람들이 있다. 느린 이유가 뭔지도 모르고 느리다고 하고 있다. JOIN은 절대 느린 것이 아니며, JOIN으로 성능이 월등히 향상되는 경우도 있다. 이제부터 오해를 풀고, 데이터 연결에 대한 이해를 해보도록 하자. 대부분의 DBMS에서 LOOP JOIN, MERGE JOIN, HASH JOIN 이렇게 3가지는 기본적으로 지원한다. 또한 UNION, 함수를 이용하여 데이터를 연결할 수도 있다. 각각의 연결방법에 대해서 실증적으로 접근해보도록 하겠다. ==== 기타 ==== 많은 예제들은 Microsoft SQL Server 2000의 pubs DB나 2005버전의 AdventureWorks DB로 할 것이다. 만약 2005이상의 DBMS가 설치되어 있다면 아래의 링크에서 pubs DB를 다운로드하여 설치하라. [http://databaser.net/moniwiki/wiki.php/MicrosoftSQLServer?action=download&value=instpubs.zip download] ==== 조언 ==== 문서를 보다 보면 복잡한 그림과 설명이 튀어나올 수 있다. 하지만 그게 모두 다 필요한 것은 아니다. 핵심적인 개념만 잘 가지고 있다면 나머지는 각각의 연결방식의 장/단점을 알고 판단하기만 하면 된다. SQL문으로 실행계획을 조절하는 것은 생각보다 쉽다. ==== 참고할 만한 자료 ==== * [http://www.mssqltips.com/tip.asp?tip=2115 Understanding SQL Server Physical Joins] * Craig Freedman's SQL Server Blog * [http://blogs.msdn.com/b/craigfr/archive/2006/07/19/671712.aspx Introduction to Joins] * [http://blogs.msdn.com/b/craigfr/archive/2006/07/26/679319.aspx Nested Loops Join] * [http://blogs.msdn.com/b/craigfr/archive/2006/08/03/687584.aspx Merge Join] * [http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx Hash Join] * [http://blogs.msdn.com/b/craigfr/archive/2006/08/16/702828.aspx Summary of Join Properties]