たとえば、10000000レコードのテーブルがあり、に100000のIDを持つというリストがあります。Linq2Sqlは複数のIDでレコードを選択しますか?
どのようにこれらのIDですべてのレコードを選択できますか? もちろん、私はこのようにそれを行うことができます。
var ids = GetIds();
var result = from q in ctx.Records
where ids.Contains(q.Id)
select q;
しかし、私はこのようにそれを行う場合、それは二つの問題があります:生成されたSQLで
怪物私はこのクエリを使用するたびに。
各行に対して複雑(O)。だから、私は数年後に私の結果を受け取ります。
どうすればいいですか?これはlinq2sql
でどのように行われるのですか、これを回避することは不可能ですか?
更新
- GetIds - この関数は、およそ100.000 IDを返します。そして、いいえ、私ははそれに参加できません。 と計算されます。
はい、私はそれをテストし、私はそれをデバッグし、生成されたものを見たことがあります。
SELECT * FROM Records WHERE id IN (/*one hundreds of thousand goes here O_O*/)
シンプルな数学::10.000.000 X 100.000与える1.000.000.000.000時間の複雑さは、このようなものです。これは非常に不十分です。あなたのIDが固定されている場合
あなたはそれが各行についてO(N)だと思いますか? – Andrey
'GetIds'とは何ですか?それはどこから来て、戻り値の型は何ですか? –
あなたはそれが遅いことをテストしましたか? 'WHERE ID IN(1,2,3,4,5、...、100000)'クエリに変換されます。もちろん、これは最善の方法ではありません(したがって、ユーザー定義のテーブル型とテーブル値のパラメータを使用できますが、LINQ-To-SQLは使用できません)。 –