Производительность сортировки NHibernate

Я испытываю некоторую отрицательную производительность при отсортированных запросах.

Вот как запрос генерируется и обрабатывается NHibernate:

SELECT   TOP 50 y0_,
                y1_
FROM     **(SELECT distinct r1_.Id                         as y0_,
                          this_.Id                       as y1_,
                          ROW_NUMBER()
                            OVER(ORDER BY this_.Id DESC) as __hibernate_sort_row
          FROM   Event this_
                 inner join Registration r1_
                   on this_.Id = r1_.EventId
          WHERE  this_.IsDeleted = 0 /* @p2 */
                 and this_.SportId in (22 /* @p3 */)) as query**
WHERE    query.__hibernate_sort_row > 20
ORDER BY query.__hibernate_sort_row;

Жирная часть (внутри **-символов) извлекает все результаты и упорядочивает их - это то, что требует времени. Есть ли способ сделать этот запрос более эффективным? Я просто хочу сделать сортировку и разбиение на страницы возможными, не создавая слишком много накладных расходов.

Я использую NHibernate 2.1. Какие-либо улучшения в будущих выпусках, связанные с моей проблемой?

С уважением, Маттиас


comment
Я не вижу ничего особенного в запросе, который я бы назвал ужасным для производительности. Вы запускали запрос через оптимизатор, чтобы увидеть, отсутствуют ли какие-либо индексы?   -  person F.B. ten Kate    schedule 20.09.2011
comment
Это была проблема с индексом. Спасибо!   -  person Mattias    schedule 20.09.2011
comment
Не за что, тогда я опубликую это как ответ.   -  person F.B. ten Kate    schedule 20.09.2011


Ответы (1)


Запустите запрос через советник по настройке базы данных, скорее всего отсутствует (или плохой) индекс.

person F.B. ten Kate    schedule 20.09.2011