我有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: []
答案 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
上定义了索引,那么您应该从中获得非常好的表现。