ここに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_Meter
null ではない のみを見つけます。次に、それらからt_Meter
個別の項目のみを選択して並べ替え、98 程度のリストを返しints
ます。
私はまだSQLデータベースについて十分に知らないか、それが単一のクエリに入れるためのdb呼び出しの極端なセットであるかどうかを直感的に知ることができませんが、私のローカルサーバーでは1秒以下しかかからないので、私はそれを考えました大丈夫でした。
編集: これは、私がまったくクリーンアップしていない LINQ コードです: http://pastebin.com/JUkdjHDJ面倒ですが、仕事は完了です...とてつもなく。だから代わりにToArray
OrderBy
Distinct
var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()
やった
var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()
自動生成された SQL クエリではなく、Linq コードをリンク (およびクリーンアップ) していれば、これは簡単に解決できたはずです。申し訳ありません。