ローカルのSQL2008で約00:00:00:00:00:01sで動作するLinq To Sql query(or with brackets)がありますが、リモートサーバーでは00:02:10およそ56K dbo.Movies、dbo.Boxarts内の項目、およびdbo.OmdbEntriesリモートサーバー上でDbContextがタイムアウトします
{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}
で300Kがあります内側のクエリは最初のテーブル内のすべての関連項目を取り、その後、そのオブジェクトから、新しいオブジェクトを作成し、ヌルでないt_Meter
だけを見つけてください。次にt_Meter
から、別個の項目だけを選択し、並べ替えて、98またはそれ以上のリストを返すints
。
私はまだSQLデータベースについて十分に知りませんし、直感的にそれが単一のクエリに入れるための極端なセットのdb呼び出しであるかどうかを知ることはできませんが、ローカルサーバー、私はそれが大丈夫だと思った。
編集:ここで私は本当にすべてでクリーンアップされていないLINQコードです:http://pastebin.com/JUkdjHDJそれは厄介だが、それは...私が見つけた問題を修正する修正プログラムをOrderBy
後ToArray
を呼んでいた仕事を取得しますが、Distinct
を前に、非常に助けてくれました。だからではなく、
var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()
の私は
var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()
をした私は、LINQのコードをリンクされていた(と、それをクリーンアップ)ではなく自動生成されたSQLクエリよりも、あなたがこの問題を解決することができただろうと確信しています簡単に、申し訳ありません。それは厄介だhttp://pastebin.com/JUkdjHDJが、それは...私が見つけた問題を修正する修正プログラムをOrderBy
後ToArray
を呼んでいた仕事を取得しますが、Distinct
前に非常に手伝っ:
サーバー上で実行されているクエリーを確認できますか? (これが翻訳されたクエリーで) –
@GabrielMonteiroNepomuceno私はかなり理解していませんが、アクティビティモニターを使用している場合は、権限のためアクセスできません。このクエリを作成したLinq To SQLを表示することを意味しますか? – TankorSmash
Visual Studioを使用していて、あなたが「intelletrace」を開いていると、あなたがデータベースにinsuedされているすべてのクエリが表示されます。 Visual Studioを究極のものとしていない場合は、ローカルデータベースのプロファイルを使用してアプリケーションがどのようなクエリを行っているかを確認するのが簡単な方法です。私は問題がn + 1の質問であると思う。 –