DbContext仅在远程服务器上超时

本文关键字:服务器 超时 DbContext | 更新日期: 2023-09-27 18:04:07

我在这里有一个Linq To Sql查询(或带括号),它在我的本地SQL2008上工作,大约00:00:00 - 00:00:01秒,但在远程服务器上,它需要大约00:02:10秒。dbo中大约有56000个项目。电影,dbo。Boxarts和30万美元。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}

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

我对SQL数据库的了解还不够,或者不能直观地知道这是否是一个极端的数据库调用集,但是因为它只需要一秒钟或更少的时间在我的本地服务器上,我认为这是对的。


编辑:这是我还没有真正清理的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查询,您将能够轻松解决这个问题,对不起。

DbContext仅在远程服务器上超时

这是我还没有真正清理的LINQ代码:http://pastebin.com/JUkdjHDJ它很乱,但它完成了工作…我发现的修复是在OrderBy之后调用ToArray,但在Distinct之前帮助很大。所以不用

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

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

我猜它是有效的,因为它运行的Distinct只对数组在内存中,而不是整个DB的值的条目?不过我不是很确定,因为旧的LINQ在我的本地服务器上工作得很完美。

我敢肯定,如果我链接了Linq代码(并清理了它)而不是自动生成的SQL查询,您将能够轻松解决这个问题,对不起。