我对选择两种方法感到困惑。
方案
分别有两个表Table 1
和Table 2
。 Table 1
包含用户的数据,例如名字,姓氏等
Table 2
包含每个用户拥有其描述的汽车。即Color
,Registration No
等
现在,如果我想获得所有用户的所有信息,那么最好在最短时间内完成哪种方法?
方法1。
查询Table 1
中的所有行,并将它们全部存储在ex。
然后遍历列表并查询它并根据第一步中保存的用户从Table 2
获取数据。
方法2
查询所有行,同时保存该行从table 2
获取所有值并保存它们。
如果我想到系统进程,那么我认为它可能是相同的,因为在这两种方法中都没有相同的记录处理。
如果还有其他更好的主意,请告诉我
答案 0 :(得分:6)
您的两种方法将具有相同的性能(由于N + 1查询而缓慢)。像这样执行单个查询会更快:
select *
from T1
left join T2 on ...
order by T1.PrimaryKey
您的客户端应用可以解释结果并将所有数据放在一个查询中。另一种选择是:
select *, 1 as Tag
from T1
union all
select *, 2 as Tag
from T2
order by T1.PrimaryKey, Tag
这只是伪代码,但你可以使它工作。
union-all查询将具有令人惊讶的良好性能,因为sql server将执行“merge union”,其工作方式类似于merge-join。此模式也适用于多级父子关系,但不是很好。