このクエリを最適化するのに問題があります。このLINQクエリを改善して、ユーザーがリスト内のすべてのスキルを見つける方法
特定のスキルを持つユーザーを除外します。
これらのスキルは、GUIDであるIDのリスト形式でサーバーに送信されます。
残念ながら、私が望むように簡単にユーザーを取得することはできません。これを行う最後の人がこれをSQLビューに配置したからです。
ここでは、すべてのスキルを選択したすべてのユーザーを検索して検索します。
skillIDs
は、GUIDの
のリストである私はそれが働いている方法は非常に非効率的であると認識それは我々が
myView.Where(view => !skillIDs.Except(view.User.Skills.Select(skill => skill.ID).Any()))
myview.Where(view => skillIDs.All(skill => view.User.Skills.Select(s => s.ID).contains(skill)))
を試してみました
myview.Where(view => skillIDs.All(skill => view.User.Skills.Any(s => s.ID == skill)))
他のもののように見えるもので、はい、私たちは結果を改ページしていますが、このクエリの後までは改行していません。私が考えているのは、実行するべきときである.skip(0).Take(10).tolist()
を待つのではなく、ここでクエリを実行しているということです。今のところ、これが動作するには45秒かかります。上記のクエリを実行しようとしていないときは、1秒未満です。これが原因です。
インデックスにはインデックスがありますか? –
私はそうですが、SQLビューで実際にインデックスを作成することはできません –
ビューにインデックスを持たないのはなぜですか? –