我如何快速比较 table 列,2 tables

How can i compare table colums in a fast way, 2 tables

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

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

表 1 90.000 条记录 -ID -IsChecked -其他数据

Table2 60.000 条记录 -ID -数据 -其他数据

我有这段代码,它确实可以完成工作,但速度太慢了。将 60k 次与 90k 进行比较,一定有更聪明的方法吗? 我怎样才能做得更好?

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

using DAL;
using System;
using System.Linq;

public class ReadData
{
DataModelContainer model;

public static void Main()
{
new ReadData();
Console.WriteLine("Done");
Console.ReadLine();
}

ReadData()
{
this.model = new DataModelContainer(); ;

var idRecord = this.model.IdListSet.Where(x => x.IsChecked == true).ToList(); //90.000 Table1
var record = this.model.CompRegSet.Where(z => z.HtmlRecord != null).ToList(); //60.000 Table2
Console.WriteLine("This many ID's are marked: " + idRecord.Count);
Console.WriteLine("This many have data: " + record.Count);
Console.ReadLine();

int i = 0;
foreach (var item in record)
{
    foreach (var ids in idRecord)
    {
        if (item.Id == ids.Id)
        {
            i++;
            ids.IsChecked = false; 
            this.model.SaveChanges();
        }

    }
}

Console.WriteLine(i);

}    
}

EF 未针对像这样读取和更新数千条记录进行优化。除其他事项外,您还必须担心不断增长的对象缓存、大量网络往返等。可以通过多种方式对其进行调整,但使用 EF 可能永远无法获得令人满意的性能。

在这些情况下,我认为使用raw 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 上定义了一个索引,您应该从中获得非常好的性能。