DbContext仅在远程服务器上超时

Tan*_*ash 6 c# linq asp.net asp.net-mvc-3

这里有一个Linq To Sql查询(或带括号),可以在我的本地SQL2008上运行,大约在00:00:00-00:00:01s,但是在远程服务器上,需要大约00:02:10s .dbo中有大约56k项目.电子邮件,dbo.Boxarts和dbo中的300k.OmdbEntries

{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}
Run Code Online (Sandbox Code Playgroud)

内部查询首先获取表中的所有相关项,然后创建一个新对象,然后从该对象中仅查找t_Meter非空的s.然后从那些t_Meters中,仅选择不同的项目然后对它们进行排序,以返回98左右的列表ints.

我还不了解SQL数据库是否直观地知道这是一组极端的db调用放入单个查询,但由于它只需要一秒或更少的时间在我的本地服务器上,我认为它没事.


编辑:这是我根本没有真正清理的LINQ代码:http://pastebin.com/JUkdjHDJ它很乱,但它完成了工作......我发现的修复是在调用ToArray之后OrderBy,但在Distinct帮助之前非常.而不是

 var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()
Run Code Online (Sandbox Code Playgroud)

我做到了

var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()
Run Code Online (Sandbox Code Playgroud)

我确定我已经链接了Linq代码(并清理了它)而不是自动生成的SQL查询,你可以很容易地解决这个问题,对不起.

Tan*_*ash 0

这是我根本没有真正清理过的 LINQ 代码:http://pastebin.com/JUkdjHDJ它很乱,但它完成了工作...我发现的修复是在ToArrayafter调用OrderBy,但 beforeDistinct帮助很大。所以而不是

 var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()
Run Code Online (Sandbox Code Playgroud)

我做到了

var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()
Run Code Online (Sandbox Code Playgroud)

我想它之所以有效,是因为它只Distinct针对内存中的数组运行,而不是针对整个数据库的条目?但我不太确定,因为旧的 LINQ 在我的本地服务器上运行得很好。

我确信如果我链接了 Linq 代码(并清理了它)而不是自动生成的 SQL 查询,您将能够轻松解决这个问题,对此感到抱歉。