我如何快速比较表colums,2表

时间:2016-06-07 15:15:51

标签: c# performance entity-framework linq sql-server-express

我有2个表,我想知道有多少标记为IsCkecked = true的记录在表2中没有数据。 然后我需要将它们标记为假,以便它们第二次被检出。

第二个程序正在处理所有Table1记录并将数据保存到Table2。

表1 90.000条记录 -ID -IsChecked -OtherData

表2 60.000条记录 -ID -数据 -OtherData

我有这个代码,它确实完成了工作,但它太慢了。比较60k倍到90k必须有一个更聪明的方法? 我怎样才能做得更好?

我可以使用EF而不是Linq吗?

In [109]:
df.groupby('Time [s]').apply(lambda x: print(str(x.name) + '.csv'))

3.87.csv
8.72.csv
13.39.csv
Out[109]:
Empty DataFrame
Columns: []
Index: []

1 个答案:

答案 0 :(得分:1)

EF未经过优化,无法读取和更新数千条记录。除此之外,你还要担心不断增长的对象缓存,大量的网络往返等等。有很多方法可以调整它,但是你可能永远无法使用EF实现令人满意的性能。

在这些情况下,我认为使用原始SQL是合理的,这样您就可以让数据库一次性执行整个操作。如果愿意,您甚至可以将SQL包装在存储过程中。

在这种情况下,你可能会写一个UPDATE语句,看起来像这样:

update a
   set a.IsChecked = 0
  from IdList a
 where a.IsChecked = 1
   and exists (select null
                 from CompReg b
                where b.HtmlRecord is not null
                  and b.Id = a.Id)

如果您至少在CompReg.Id上定义了索引,那么您应该从中获得非常好的表现。