我的Linq To Sql query(or with brackets)在我的本地SQL2008上运行,大约在00:00:00-00:00:01s,但在远程服务器上,需要00:02:10s左右。在dbo.Movies,dbo.Boxarts中有大约56k项目,在dbo.OmdbEntries中有300k项目
{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
中,仅选择不同的项目,然后对它们进行排序,以返回大约98个ints
的列表。
我还不了解SQL数据库是否直观地知道这是否是一组极端的db调用放入单个查询,但由于它只需要一秒或更少的时间在我的本地服务器上,我觉得没事。
编辑:这是我根本没有真正清理过的LINQ代码:http://pastebin.com/JUkdjHDJ它很乱,但它完成了工作......我找到的修复是在ToArray
之后调用{ {1}},但在OrderBy
帮助极大之前。而不是
Distinct
我做了
var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()
我确定我已经链接了Linq代码(并清理了它)而不是自动生成的SQL查询,你本可以轻松解决这个问题,对不起。
答案 0 :(得分:0)
这是我根本没有真正清理过的LINQ代码:http://pastebin.com/JUkdjHDJ它很乱,但它完成了工作......我找到的修复是在{{1}后调用ToArray
}},但在OrderBy
帮助之前。而不是
Distinct
我做了
var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()
我想这是有效的,因为它只对内存中的数组运行var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()
,而不是整个数据库的条目值?我不太确定,因为旧的LINQ在我的本地服务器上完美运行。
我确定我已经链接了Linq代码(并清理了它)而不是自动生成的SQL查询,你本可以轻松解决这个问题,对不起。