假设我的影片是由多个表引用像Profile
表Client
,Address
,Phone
,Account
...通过所有这些表client_id
列。多一个一对多连接到同一台性能
所以一个客户端可能有多个配置文件,多个地址等。
我需要通过单个查询获取所有Client
的信息。
如果我写的查询像
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
和帐户有10个配置文件,10个地址,10部手机和10个账户我想最终10000(10x10x10x10)排在我的结果集,但我需要只有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,这是性能问题。所有列都被编入索引。我害怕结果有10K行,99%的数据因为连接而重复。 –