0

C#プロジェクトにこのlinqクエリがあります

       var query = from p in db.Posts
                    join a in db.Author on p.Author equals a
                    join u in db.Users on p.PostedBy equals u
                    where p.IsActive.Equals(true)
                    orderby p.PostedDate descending
                    select new ViewModel
                    {
                        ...
                    };

私がwhere p.IsActive.Equals(true)近くに移動するfrom p in db.Postsと、のように

       var query = from p in db.Posts
                    where p.IsActive.Equals(true) //Moved
                    join a in db.Author on p.Author equals a
                    join u in db.Users on p.PostedBy equals u
                    orderby p.PostedDate descending
                    select new ViewModel
                    {
                        ...
                    };

クエリのパフォーマンスに違いはありますか?

4

2 に答える 2

1

実行しても機能するかどうかはわかりませんが、SQL データベースに対して使用している場合、違いはありません。両方のクエリは、次のような SQL に変換されます。

SELECT ...
FROM Posts INNER JOIN Author ON ... INNER JOIN Users ON ...
WHERE Posts.IsActive = true
...
于 2012-07-22T17:20:02.927 に答える
1

パフォーマンスに関しては、結合をどこよりも前に置くことを強くお勧めします。

その理由は、結合によって既に小さいセットが作成されているためです (p は Posts から選択され、Author と Users から一致する行のみが取得されます。

反対に、先頭近くに where がある場合、カレシアン (大きな) 積が計算されてからフィルター処理されます。(あなたの特別なケースでは、影響を受けるのは1つのテーブルだけですが、クエリはいつか変更される可能性があり、なぜ遅いのか誰も知りません)。

これを読んでください SO Why is LINQ join so much fast than LINQ where

さらに、特別なケースについて: これはデータベースに影響を与えるため、結果の SQL ステートメントは両方のクエリで同じになるはずです。それを見てください!

于 2012-07-22T19:27:44.490 に答える