Производительность SQL vs LINQ - программирование

Производительность SQL vs LINQ

В настоящее время у нас есть самодельная структура сущностей, которая опирается на независимую от БД ORM.

Мне нужно создать программное обеспечение, которое загружает метаданные в БД около 150 шаблонов excel (с информацией о позиции ячейки, типе ячеек, форматировании и т.д.).

Я могу работать

  • через пакет SQL (быстрее и менее интерактивно)

  • путем создания объектов в памяти, обработки их с помощью запросов LINQ для различных проверок целостности и последующего внесения изменений в БД

Я знаю, что SQL абсолютно быстрее, но я бы знал... , насколько это быстрее?

Подробно, насколько SQL-запрос быстрее, чем запрос LINQ (если предположить, что все необходимые данные уже загружены в память ORM)?

4b9b3361

Ответ 1

TBH в большинстве случаев linq или SQL - это не совсем проблема. Ваша производительность будет связана с тем, сколько данных вы вставляете, количество данных, находящихся в настоящее время в вашей таблице, и индексы, которые вы поддерживаете.

Во-вторых, нужно ли выполнять кросс-проверку и/или проверку целостности в нескольких столбцах ваших данных. У меня были ситуации, когда добавление индекса и восстановление таблицы заняли время вставки с минут до миллисекунд, только из-за плохой фрагментации и отсутствия алгоритма.

Linq - эффективный способ генерации SQL для логики вставки и модификации. Однако вы всегда будете иметь шаблон:

  • Получение данных из базы данных
  • Изменить данные с помощью Linq
  • Внести изменения в базу данных.

Если у вас есть какая-либо логика, которую вы можете использовать в своих вставках, вы можете использовать заданную логику для выполнения обновлений в SQL. Например. Обновление клиентов. Установите KeyCustomer = 1, где Sales > 1000000. SQL Server будет обрабатывать такую ​​команду в 1000 раз быстрее, чем вы могли бы сделать с вашим ORM. Однако, как @gbn уже правильно указал, если у вас нет команды с сильными SQL-кодонами, обслуживание будет часто превзойти любое первичное усиление в краткосрочной перспективе.

Если вам нужно вставить значительное количество записей, вам следует действительно смотреть на пакетную загрузку и/или ETL через SSIS. Эти API-интерфейсы будут использовать более интеллектуальные алгоритмы и выполнять любые проверки ограничений пакетами, а не каждой вставкой, что даст вам отличную производительность. Но управление пакетом SSIS намного больше, чем нажатие кнопки в приложении. Это все проектные решения, которые вам необходимо учитывать при архивировании приложения.

Ответ 2

Здесь у вас есть сравнение производительности между различными ORM и SqlDataReader: http://code.google.com/p/dapper-dot-net/ (раздел "Эффективность" ). Стоит отметить, что компиляция запросов LINQ может значительно повысить производительность: http://www.codeproject.com/Articles/38174/How-to-improve-your-LINQ-query-performance-by-5-X