У меня есть Linq To Sql query (or with brackets) здесь, который работает на моем локальном SQL2008, примерно с 00:00 до 00:00 - 00: 00: 01, но на удаленном сервере он занимает около 00: 02: 10s. Там же около 56k элементов в dbo.Movies, dbo.Boxarts и 300k в dbo.OmdbEntriesDbContext отключается только на удаленном сервере
{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
s, которые не являются нулевыми. Затем из этих t_Meter
s выберите только отдельные элементы, а затем отсортируйте их, чтобы вернуть список из 98 или около того ints
.
До сих пор я недостаточно знаю о SQL-базах данных, чтобы интуитивно узнать, действительно ли это экстремальный набор вызовов db для ввода одного запроса, но поскольку на моем локальном сервере он занимает всего несколько секунд или меньше , Я подумал, что все в порядке.
редактировать: Вот код LINQ, что я на самом деле не очищены вообще: http://pastebin.com/JUkdjHDJ Это грязно, но он получает работу ... Исправление я нашел звала ToArray
после OrderBy
, но до Distinct
очень помогли. Таким образом, вместо
var results = IQueryableWithDBDatasTMeter.Distinct().OrderBy().ToArray()
Я сделал
var orderedResults = IQueryableWithDBDatasTMeter.OrderBy().ToArray()
var distinctOrderedResults = orderedResults.Distinct().ToArray()
Я уверен, что если бы я связал код Linq (и очищать его), а не сгенерированный запрос SQL, вы смогли бы решить эту проблему легко, извините за что.
Не могли бы вы проверить, какие запросы были выполнены на сервере? (в каких запросах это переводится) –
@GabrielMonteiroNepomuceno Я не совсем понимаю, но если вы имеете в виду использование Activity Monitor, я не могу получить к нему доступ из-за разрешений. Вы имеете в виду показать вам Linq To SQL, который создал этот запрос? – TankorSmash
Если вы используете Visual Studio Ultimate, и вы открываете Интеллект, и вы увидите там все запросы, которые были включены снова в вашу базу данных. Если у вас нет визуальной студийной ступени, вам будет проще использовать профили в своей локальной базе данных, чтобы узнать, какие запросы вы делаете. Я думаю, проблема связана с n + 1 запросами. –