Быстрее ли запрашивать список <T> или базу данных?

Недавно у меня было несколько ситуаций, когда мне нужны разные данные из одной таблицы. Одним из примеров является то, что я прокручивал каждый "драйвер доставки" и создавал PDF файл для печати для каждого клиента, которому они должны доставляться.

В этой ситуации я вытащил всех клиентов и сохранил их в

List<Customer> AllCustomersList = customers.GetAllCustomers();

Как я зациклился на драйверах доставки, я бы сделал что-то вроде этого:

List<Customer> DeliveryCustomers = AllCustomersList.Where(a => a.DeliveryDriverID == DriverID);

Мой вопрос: способ, которым я это делаю, запрашивать объект List быстрее, чем запрашивать базу данных каждый раз для записей клиентов, связанных с драйвером доставки?

Ответ 1

Нет точного числа для количества строк, которое, если вы его передадите, вы должны запросить БД вместо этого в памяти List<T>

Но эмпирическое правило состоит в том, что БД предназначены для работы с большим объемом данных, и у них есть оптимизационные "механизмы", в то время как в памяти нет таких вещей.

Таким образом, вам нужно будет сравнить его, чтобы узнать, стоит ли округление до DB для этого количества строк для каждого важного для вас момента

"Мы должны забыть о небольшой эффективности, скажем, около 97% времени: преждевременно оптимизация - это корень всех злых "

Ответ 2

Избегание обратных рейсов в БД является одним из основных правил настройки производительности базы данных, особенно когда БД находится в сети и имеет доступ к ней несколькими пользователями.

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

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

Ответ 3

Почему бы не использовать Redis?, Это в базе данных памяти и очень быстро.