C#Linq查询优化问题

时间:2011-09-08 14:44:10

标签: c# linq

假设我有两个大表A和B,我想在A和B的第x列上执行JOIN(假设它们使用相同的名称),最后从表B中选择x和y。如果我只是更快预先选择A的x和x,y的B并在这些缩小的表上进行JOIN?

3 个答案:

答案 0 :(得分:1)

我认为你的问题是在写作时

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),查询将使用该索引而不是从整行中选择。如果您没有覆盖索引,那么如果您希望在进行连接之前将两列写入临时区域,那么您只是浪费内存。在这种特殊情况下,数据库几乎总是将两个查询优化为完全相同的执行计划。

答案 1 :(得分:0)

我对此表示怀疑。你只是通过这样做引入了一个额外的不必要的步骤。您只是将参数中指定的密钥与Join()进行比较,而不管对象中有多少其他属性。

答案 2 :(得分:0)

没有。你会在A上做无用的投影。如果使用“标准”查询,你只会对AxB进行投影,而在A上预测投影你将获得A + AxB。如果我们认为A< = B(因为B有A的引用),那么它是B投影与A + B投影。