ORM против параметризованных запросов, если меня беспокоит только скорость доступа к данным - PullRequest
0 голосов
/ 12 января 2010

Я работаю в среде разработки ASP.net/ SQL Server. Если меня беспокоит только скорость, следует ли мне выполнять параметризованные запросы или использовать ORM, например, nHibernate или LINQ?

Ответы [ 5 ]

3 голосов
/ 12 января 2010

При прочих равных условиях ORM увеличивают накладные расходы, поэтому они начинаются с недостатка.

С другой стороны, ORM может генерировать более эффективный SQL, чем вы, и многие из них оснащены встроенными функциями кэширования.что вам не нужно писать самостоятельно (и если они соответствуют вашим целям, улучшения, которые вы получите от этого кэширования, могут быть больше, чем то, что вы потеряете из-за дополнительных издержек).

3 голосов
/ 12 января 2010

Большинство ORM поддерживают параметризованные запросы, поэтому нет разницы в этом отношении.Я бы реализовал использование ORM в максимально возможной степени, и оптимизировал бы только вручную, используя SQL, когда это необходимо.

Понимание того, как работает ORM, должно помочь вам создать хорошо работающий код.Таким образом, вы можете избежать очевидных ловушек, таких как повторный вызов запроса в цикле, например, при запросе другой таблицы через внешний ключ.

1 голос
/ 12 января 2010

Издержки возникают из-за сопоставления, отслеживания изменений и т. Д., А не из самого запроса. Отображение очень быстрое, но если вы работаете с 100 000 записей в операции, прямой sql победит. Однако, если вы имеете дело с 100 000 записей в операции, вы не должны использовать ORM.

1 голос
/ 12 января 2010

Если ваша проблема only связана со скоростью запросов без использования кэша, то вам не нужен ORM, потому что его основная функция заключается в простом кодировании, устраняя необходимость выполнения собственных запросов. Но иногда вам нужно использовать собственные запросы с ORM для получения максимальной скорости, и даже при этом абстракция может занять немного больше времени, чем при использовании параметризованного запроса вручную.

Однако, если возможно, что ваши запросы получат выгоду от кэширования объектов, ORM может повысить вашу скорость.

1 голос
/ 12 января 2010

Ответ на этот вопрос действительно «зависит», и вам потребуется проверить его в своей среде для подтверждения, но в целом я бы сказал, что использование инструмента ORM добавляет дополнительный уровень абстракции, который, вероятно, будет стоить вам некоторые накладные расходы. Я полагаю, если вы действительно плохо пишете на SQL, ORM может быть лучше, но в этом случае я бы просто поработал над улучшением ваших навыков SQL.

Редактировать: я просто хотел бы добавить, что я бы не стал выбирать между ORM или без ORM на основе производительности. Я бы сделал свой выбор на основе других факторов и оптимизировал бы мой дизайн в этом контексте.

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