Медленный SQL-запрос NHibernate

Я использую LINQ to NH, чтобы получить кучу данных при запуске приложения. Я специально добавил ToList () , чтобы принудительно выполнить немедленный запрос:

Group group = GetGroup();
Log.Info("started");
var list = Session.Linq<Data>()
    .Where(p => p.Group.Id == group.Id)
    .OrderByDescending(p => p.Stamp.Counter) /* Stamp is composite mapping */
    .Select(p => new
    {
        Counter = p.Stamp.Counter,
        Status = p.Status,
    })
    .Take(4000)
    .ToList();
Log.Info("done");

Проверка журнала DEBUG для регистратора NHibernate.SQL дает следующий SQL, как и ожидалось (и этот же запрос выскакивает в SQL Profiler, когда я начинаю мониторинг):

SELECT top 4000 this_.Counter as y0_, this_.Status as y1_
FROM [Data] this_ 
LEFT OUTER JOIN [Group] group1_ ON this_.Group_id=group1_.Id
WHERE group1_.Id = @p0 
ORDER BY this_.Counter desc; @p0 = 1

Проблема в том, что этот запрос занимает 2 минуты при вызове из моего приложения, по сравнению с 0,5 с при выполнении в SSMS! На самом деле, пока приложение ожидает завершения запроса, я могу выполнить его в SSMS и мгновенно получить результаты.

Как вы думаете, откуда эта разница?

11
задан Groo 28 July 2011 в 13:33
поделиться