Производительность: должен ли я сделать один или несколько запросов к базе данных

У меня есть программа на C #, которая должна обрабатывать около 100 000 элементов, а доступ ADO.NET к базе данных SQL Server, и в одной части программы мне нужно принять решение о производительности:

Обработка Durring, для каждого элемента я должен читать данные из базы данных:

должен ли я запрашивать базу данных один раз для каждого элемента, или я должен запрашивать один раз в начале для всех элементов и хранить это 100 000 строк данных (около 10 столбцов – int и string) в объекте c # в памяти и извлекать из него требуемые данные?

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

Для каждой операции БД есть два основных компонента: стоимость передачи данных и стоимость поездки туда и обратно. В вашем случае стоимость передачи данных фиксирована, поскольку общее количество байтов не изменяется в зависимости от того, извлекаете ли вы их все сразу или получаете их по одному фрагменту за раз.

Стоимость поездки туда и обратно включает время, необходимое RDBMS для определения того, какие данные вам нужны из инструкции SQL, определения этих данных и всей блокировки, необходимой для обеспечения того, чтобы данные, которые она вам обслуживала, были согласованы. Один поезд туда-обратно не дорогой, но когда вы делаете это 100 000 раз, расходы могут очень сильно стать непомерно высокими. Поэтому лучше всего сразу прочитать данные, если это позволяет ваша конфигурация памяти.

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

Я не уверен, что вы подразумеваете под обработкой, но часто, если эта обработка может быть выполнена на сервере db, то предпочтительным вариантом будет запуск хранимой процедуры и передача ему аргументов. Затем вам не нужны круглые поездки и т. Д. Вы должны принять решение о том, хотите ли вы довести данные до обработки (от db до приложения) или довести обработку до данных (код обработки до хранимой процедуры).

Interesting Posts

Хороший дизайн таблицы базы данных для хранения локализованных версий данных

mssql – извлекает уникальные значения столбца на основе другого столбца

Почему изображение сервера Sql в двоичных причинах Проблема в строчном запросе, но работает в параметризованном запросе

Обработка параллелизма Azure для мобильных устройств в SQL?

Как переносить или переносить SQL Server 2008 Compact Edition в Express Edition

Выбор данных строки в виде столбцов

Подзапрос SQL Server возвратил более 1 значения

Округление в sql-сервере

Нужно ли использовать SSIS для создания кубов SSAS с использованием данных Oracle?

varbinary to literal varchar copy в SQL Server 2005

Entity Framework 4 – родительская таблица запроса и загруженная загрузка 1 (одиночная) дочерняя запись

Получение ошибки XML при установке SQL Server 2012

Как получить сообщение об ошибке при извлечении данных из db, но нет значений там

Возврат списка после чтения из базы данных

Как показать только одну запись – запись с наименьшим значением?

Давайте будем гением компьютера.