C# 从数据库检索数据哪种方法更好
我对选择两种方法感到困惑 场景C# 从数据库检索数据哪种方法更好,c#,sql,C#,Sql,我对选择两种方法感到困惑 场景 分别有两个表表1和表2表1包含用户数据,例如名字、姓氏等 表2包含每个用户拥有的汽车及其说明。i、 e颜色,注册号等 现在,如果我想拥有所有用户的所有信息,那么在最短时间内完成的最佳方法是什么 方法1. 查询表1中的所有行,并将它们全部存储在一个列表中,以供ex使用 然后循环浏览列表并查询,根据第一步中保存的用户从表2中获取数据 方法2 查询所有行,保存该行时,从表2中获取其所有值并保存它们 如果我想到系统进程,那么我认为它可能是相同的,因为在这两种方法中没有相同
分别有两个表
表1
和表2
<代码>表1包含用户数据,例如名字、姓氏等
表2
包含每个用户拥有的汽车及其说明。i、 e颜色
,注册号
等
现在,如果我想拥有所有用户的所有信息,那么在最短时间内完成的最佳方法是什么
方法1.
查询表1
中的所有行,并将它们全部存储在一个列表中,以供ex使用
然后循环浏览列表并查询,根据第一步中保存的用户从表2
中获取数据
方法2
查询所有行,保存该行时,从表2中获取其所有值并保存它们
如果我想到系统进程,那么我认为它可能是相同的,因为在这两种方法中没有相同的记录需要处理
如果有其他更好的主意,请让我知道您的两种方法的性能大致相同(因为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
这只是伪代码,但您可以让它工作
UNIONALL查询将具有令人惊讶的良好性能,因为SQLServer将执行“合并联合”,其工作方式类似于合并联接。这种模式也适用于多层次的父子关系,尽管不是很好。您应该提到,对于合理的大n来说,这将是一个巨大的性能胜利+1另外,您的第二个查询假设相同的列(否则您不能执行union)未读,我说这是伪代码。通过对两个表进行null扩展,可以使它适用于不同的列。