Является ли Java потоковый фильтр быстрее, чем запрос условной БД MySQL? - PullRequest
2 голосов
/ 22 января 2020

Если я хочу извлечь данные из таблицы и отфильтровать их позже, будет ли это лучше, чем выполнить условный запрос MySQL?

Пример -

  1. list.stream.filter(x-> x.getSalary() > baseSalary).collect(Collectors.toList());

  2. select * from employees where salary > 10000;, выполнение этого запроса через JPA.

Что быстрее? Должны ли мы зависеть от DB Engine для более быстрых результатов или обработки этого в нашем коде делает его лучше. Выше приведен только пример, пожалуйста, не рассматривайте это как реальное время.

1 Ответ

4 голосов
/ 22 января 2020

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

...