Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从数据库检索数据哪种方法更好_C#_Sql - Fatal编程技术网

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扩展,可以使它适用于不同的列。