入ってくるデータを受け取り、それを分割して、データベースの適切なフィールドに送信するラボ処理ソフトウェアを作成しました。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ステートメントを書き出すと、さらに速くなると期待する理由はありますか?このステートメントはSLOWですが、機能し、単体テストされ、重複をブロックします。私はより速く、同等にきれいなもの(難しいことではない、私は知っています)またはよりきれいなものを探しています...