我编写了一个实验室处理软件,它接收传入的数据,将其分解,并将其发送到数据库中的适当字段。DB表真的很大,字段也很多。在插入数据之前,我会在插入数据之前进行重复检查(我们从多个来源获取重复数据)。
系统通过解析传入数据、填充 linq-to-sql 对象来工作。重复检查通过对 linq-to-sql 对象列表执行 .where 操作来选择尚未在表中的对象。
例如 ...
input=list (of TableA) 'linq to sql objects
output=input.where(function (x as TableA) not myDb.TableA.any(function(l as table) l.name=x.name, l.dob=x.dob..etc for 10 fields..).tolist
语法有点神秘,但这是我能找到的在 linq 上执行内连接到 sql 对象和数据库记录的唯一方法。在我使用这种方法之前,我逐行执行重复检查,这要慢得多。
据我了解,Linq 正在将此 linq 语句转换为在服务器上运行的 sql 语句。
我的问题是:有没有办法让它运行得更快?有没有理由期望写出一条 sql 语句来执行重复数据删除和运行传统查询会更快?该语句很慢,但它有效,经过单元测试并阻止了欺骗。我正在寻找更快且相当干净(我知道不难)或更清洁的东西......