2013-03-14 6 views
6

ローカルのSQL2008で約00:00:00:00:00:01sで動作するLinq To Sql queryor 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それは厄介だが、それは...私が見つけた問題を修正する修正プログラムをOrderByToArrayを呼んでいた仕事を取得しますが、Distinctを前に、非常に助けてくれました。だからではなく、

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

の私は

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

をした私は、LINQのコードをリンクされていた(と、それをクリーンアップ)ではなく自動生成されたSQLクエリよりも、あなたがこの問題を解決することができただろうと確信しています簡単に、申し訳ありません。それは厄介だhttp://pastebin.com/JUkdjHDJが、それは...私が見つけた問題を修正する修正プログラムをOrderByToArrayを呼んでいた仕事を取得しますが、Distinct前に非常に手伝っ:

+0

サーバー上で実行されているクエリーを確認できますか? (これが翻訳されたクエリーで) –

+0

@GabrielMonteiroNepomuceno私はかなり理解していませんが、アクティビティモニターを使用している場合は、権限のためアクセスできません。このクエリを作成したLinq To SQLを表示することを意味しますか? – TankorSmash

+0

Visual Studioを使用していて、あなたが「intelletrace」を開いていると、あなたがデータベースにinsuedされているすべてのクエリが表示されます。 Visual Studioを究極のものとしていない場合は、ローカルデータベースのプロファイルを使用してアプリケーションがどのようなクエリを行っているかを確認するのが簡単な方法です。私は問題がn + 1の質問であると思う。 –

答えて

0

は、ここで私は本当にすべてでクリーンアップされていないLINQコードです。だからではなく、

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

の私は

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

をした私は、それが唯一のメモリアレイではなく、エントリ全体のDBの価値に対してDistinctを実行しているので、それが働くと思いますか?古いLINQがローカルサーバー上で完璧に動作するので、私は本当に確信していません。

私は、自動生成されたSQLクエリではなく、Linqコードをリンクして(そしてそれをクリーンアップしていた)、これを簡単に解決できたと思います。

関連する問題