Является ли выбор N + 1 лучше, чем стремление присоединиться? - PullRequest
1 голос
/ 03 января 2011

Я использую профилировщик nhibernate и вижу несколько мест, где он дает мне предупреждение «Выберите n + 1».

Очевидное решение состоит в том, чтобы сделать некоторые предварительные нетерпеливые объединения, но это заставило меня задуматься, если в некоторых случаях на самом деле проще или быстрее жить с Select N + 1 по сравнению с выполнением объединений, которые могут загружать много данных, которые вы никогда не используете .

Ответы [ 3 ]

2 голосов
/ 03 января 2011

Ваше мышление правильно.Например, в некоторых случаях все корневые объекты ссылаются на один или два экземпляра другого объекта.Может быть быстрее сделать 2 или 3 небольших выбора вместо денормализованного (т. Е. С объединениями)

Существует способ сделать это удобным практически во всех случаях: batch-size.Если вы установите для этого атрибута как в сущностях, так и в коллекциях свой обычный размер страницы, вы получите постоянное количество небольших выборок (по одному на тип сущности).

1 голос
/ 03 января 2011

Я не уверен, знаете ли вы о другом варианте

В ваших отображениях добавьте

<list name="MyItems" batch-size="10">

или

<bag name="MyItems" batch-size="10">

Если у вас есть 10 элементов, вы тольконужно два запроса вместо 11. Для 20 элементов нужно три вместо 21 и так далее.Это позволит сократить около 90 процентов ваших запросов.

1 голос
/ 03 января 2011

Выбор N + 1 станет все большей и большей проблемой, как только в вашем приложении будет достаточно данных.

Как правило, загрузка данных намного дешевле, чем другая поездка в базу данных.Так что, если вы можете - вы должны избегать этого.

Что касается загрузки дополнительных данных.Если вы думаете, что загрузите значения свойств, которые не будут использоваться, вы можете использовать функцию отложенного загрузки свойств NHibernate 3.0.

Поэтому следует избегать общего выбора N + 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...