6

ここにLinq To Sqlクエリまたはブラケット付き)があり、ローカルSQL2008で約00:00:00秒から00:00:01秒で動作しますが、リモートサーバーでは約00:02:10秒かかります. dbo.Movies、dbo.Boxarts には約 56,000 のアイテムがあり、dbo.OmdbEntries には 300,000 のアイテムがあります。

{SELECT
//pull distinct t_meter out of the created object
Distinct2.t_Meter AS t_Meter
//match all movie data on the same movie_id
FROM ( SELECT DISTINCT
        Extent2.t_Meter AS t_Meter
        FROM    dbo.Movies AS Extent1
        INNER JOIN dbo.OmdbEntries AS Extent2 ON Extent1.movie_ID = Extent2.movie_ID
        INNER JOIN dbo.BoxArts AS Extent3 ON Extent1.movie_ID = Extent3.movie_ID
        //pull the genres matched on movie_ids
        INNER JOIN  (SELECT DISTINCT
                Extent4.movie_ID AS movie_ID
                FROM  dbo.MovieToGenres AS Extent4
                //all genres matched on movie ids
                INNER JOIN dbo.Genres AS Extent5 ON Extent4.genre_ID = Extent5.genre_ID ) AS Distinct1 ON Distinct1.movie_ID = Extent1.movie_ID
        WHERE 1 = 1
//sort the t_meters by ascending
)  AS Distinct2
ORDER BY Distinct2.t_Meter ASC}

内部クエリは、最初にテーブル内のすべての関連項目を取得してから新しいオブジェクトを作成し、そのオブジェクトからt_Meternull ではない のみを見つけます。次に、それらからt_Meter個別の項目のみを選択して並べ替え、98 程度のリストを返しintsます。

私はまだSQLデータベースについて十分に知らないか、それが単一のクエリに入れるためのdb呼び出しの極端なセットであるかどうかを直感的に知ることができませんが、私のローカルサーバーでは1秒以下しかかからないので、私はそれを考えました大丈夫でした。


編集: これは、私がまったくクリーンアップしていない LINQ コードです: http://pastebin.com/JUkdjHDJ面倒です、仕事は完了です...とてつもなく。だから代わりにToArrayOrderByDistinct

 var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()

やった

var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()

自動生成された SQL クエリではなく、Linq コードをリンク (およびクリーンアップ) していれば、これは簡単に解決できたはずです。申し訳ありません。

4

1 に答える 1

0

まったくクリーンアップしていない LINQ コードを次に示します。だから代わりにToArrayOrderByDistinct

 var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()

やった

var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()

DistinctDB全体に相当するエントリではなく、メモリ内の配列に対してのみ実行されているため、機能すると思いますか? ただし、古い LINQ はローカル サーバーで問題なく動作するため、よくわかりません。

自動生成された SQL クエリではなく、Linq コードをリンク (およびクリーンアップ) していれば、これは簡単に解決できたはずです。申し訳ありません。

于 2013-03-18T17:37:21.137 に答える