C# C Linq查询优化问题

C# C Linq查询优化问题,c#,linq,C#,Linq,假设我有两个大表A和B,我想对A和B的x列执行联接,假设它们使用相同的名称,并最终从表B中选择x和y。如果我只是预先选择A的x和B的x,y,并对这些简化的表执行联接,会更快吗 我对此表示怀疑。你这样做只是引入了一个额外的不必要的步骤。无论对象中有多少其他属性,您只会比较要联接的参数中指定的键。否。您将在A上进行无用的投影。如果使用标准查询,您将只在AxB上进行投影,而在A上进行预投影时,您将获得A+AxB。如果我们认为我假设你的问题是你在写< /P> select B.x, B.y from A

假设我有两个大表A和B,我想对A和B的x列执行联接,假设它们使用相同的名称,并最终从表B中选择x和y。如果我只是预先选择A的x和B的x,y,并对这些简化的表执行联接,会更快吗

我对此表示怀疑。你这样做只是引入了一个额外的不必要的步骤。无论对象中有多少其他属性,您只会比较要联接的参数中指定的键。

否。您将在A上进行无用的投影。如果使用标准查询,您将只在AxB上进行投影,而在A上进行预投影时,您将获得A+AxB。如果我们认为我假设你的问题是你在写< /P>
select B.x, B.y
from A
join B on B.x = A.x
选择更快吗

select B2.x, B2.y
from (select x from A) A2
join (select x,y from B) B2 on B2.x = A2.x

简短的回答是:否。例如,如果B上有覆盖索引x,y,则查询将使用该索引,而不是从整行中进行选择。如果没有覆盖索引,那么如果希望在进行连接之前将两列写入临时区域,那就是在浪费内存。在这种特殊情况下,数据库几乎总是将两个查询优化为完全相同的执行计划。

您所说的预选是什么意思。