Как часто вы пишете новые запросы SQL или пытаетесь использовать уже существующие?

Я не нашел подобного вопроса. Я хотел бы услышать предложения и мнения.

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

Например:

SELECT * FROM transaction tr WHERE tr.progress_date = '?' -- about 20 rows

Но когда в какой-то момент нам нужна конкретная информация из базы данных. Вы всегда пишете новый запрос для этого случая? Например:

SELECT SUM(tr.amount) FROM transaction tr WHERE tr.progress_date = ? AND tr.sender = ?;

Или использовать некоторые существующие, если они похожи, и не возвращать гораздо больше данных, а также выполнять дополнительную простую фильтрацию или поиск на стороне сервера? Например:

SELECT * FROM transaction tr WHERE tr.progress_date = '?' -- about 20 rows

|
V

double sum = transactions.stream().mapToDouble(t -> t.getAmount()).sum();

Обратите внимание, что это не маленькое программное обеспечение, и часто возникает новая ситуация, когда некоторая информация требуется только для одного конкретного случая.

Предположим, что данные не кэшируются и это база данных Oracle, Postgres или MySql

Всего 1 ответ


Вы хотите, чтобы СУБД выполняла тяжелую работу при запросе больших таблиц. Очевидно, всегда используйте PreparedStatement с параметрами и, при необходимости, индексами или выполнением объединений.

В случае небольшого набора данных (т. Е. Пример с 20 строками) допустимо выполнять фильтрацию / обработку в вашем коде Java, иногда это может быть преимуществом, поскольку вы можете использовать один запрос, используемый различными методами Java.

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


Есть идеи?

10000