내가 Profile
처럼 여러 테이블에 의해 참조되는 것 테이블 Client
이 가정, Address
, Phone
, Account
...이 모든 테이블의 client_id
칼럼을 통해.여러
그래서 하나의 클라이언트는 여러 개의 프로필, 여러 개의 주소 등을 가질 수 있습니다.
나는 Client
의 모든 정보를 단일 쿼리를 통해 얻어야합니다.
내가 작성하는 경우 내가 필요한거야하지만 내가 내 결과 집합에서 10000 (10x10x10x10) 행으로 끝날 것 10 명 프로필, 10 개 주소, 10 전화 10 개 계정이
SELECT C.*, PR.*, AD.*, PH.*, AC.* FROM CLIENT C
LEFT OUTER JOIN PROFILE PF ON C.ID=PF.CLIENT_ID
LEFT OUTER JOIN ADDRESS AD ON C.ID=AD.CLIENT_ID
LEFT OUTER JOIN PHONE PH ON C.ID=PH.CLIENT_ID
LEFT OUTER JOIN ACCOUNT AC ON C.ID=AC.CLIENT_ID
및 계정과 같은 쿼리 단지 40 (10 + 10 + 10 + 10).
여러 개의 쿼리를 작성하는 것이 좋으며, 데이터베이스의 행을 줄이는 간단한 방법이 있습니까?
UPD : 추가 샘플 데이터 :
Client
ID | Name | ...
------ | -----------|-----
1 | "John Doe" |
Profile
ID | CLIENT_ID | TYPE | ...
------ | --------- | ----------- | ---
1 | 1 | "Primary" |
2 | 1 | "Secondary" |
3 | 1 | "Work" |
4 | 1 | "Office" |
5 | 1 | "Vacation" |
...
'주소'
ID | CLIENT_ID | ADDRESS_TEXT | ...
------ | --------- | ------------ | ---
1 | 1 | "Paris, ..." |
2 | 1 | "London..." |
3 | 1 | "Tokyo..." |
4 | 1 | "Moscow" |
5 | 1 | "New York" |
...
'계정'
ID | CLIENT_ID | ACCOUNT_NUM | ...
------ | --------- | ------------ | ---
1 | 1 | "0" |
2 | 1 | "0172456123" |
3 | 1 | "12340" |
4 | 1 | "6789134834" |
5 | 1 | "2378166341" |
...
예상되는 ResultSet의 응답을 알 수 없습니다. 보통 그냥 조인이었고 모든 것이 정상이었습니다. 처음으로 퍼포먼스에 대해 생각하기 시작했습니다.
성능 또는 데이터 표현에 대한 질문입니까? 현재 쿼리는 client_id 열의 인덱스가있는 한 잘 수행됩니다. – jarlh
좀 더 자세한 답변을 얻으려면 몇 가지 샘플 데이터와 예상 결과를 입력하십시오. 성능 문제는 – JohnHC
@jarlh입니다. 모든 열에 대한 색인이 생성됩니다. 조인 때문에 99 %의 데이터 만 복제되므로 결과적으로 10K 개의 행이 두려워요. –