Самый эффективный способ запроса базы данных с JDBC? - PullRequest
3 голосов
/ 21 марта 2012

Мне нужно получить данные из нескольких таблиц, поэтому я использовал запрос с N левыми внешними объединениями.Мне кажется, что это может быть пустой тратой производительности, так как я получаю декартово произведение множества данных.Какой способ предпочтительнее для достижения большей производительности?Я думаю сделать N + 1 маленьких запросов.Я на правильном пути?

Я знаю, это имеет мало общего со спецификой JDBC.Я хочу получить данные из одной таблицы и сделать внешние левые соединения с другими N таблицами.Результирующий набор становится очень большим, потому что я получаю декартово произведение.Например:

table1data1, table2data1, table3data1

table1data1, table2data2, table3data1

table1data1, table2data1, table3data2

table1data1, table2data2, table2data

Я знаю, что если я сделаю несколько запросов к базе данных (например, в моем примере я получу 1 запись для таблицы 1, 2 записи для таблицы 2 и 2 записи для таблицы 2), я сделаю много обращений в базу данных,Но я проверил этот способ, и он выглядит намного быстрее.

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Это действительно не специфично для JDBC.Вообще говоря, в зависимости от количества возвращаемых данных вы получите лучшую производительность, получая все в одном наборе результатов.N + 1 запросов имеет тенденцию совершать множество обращений к базе данных.Содержит ли результирующий набор поля, которые вам не нужны?Можете ли вы обрезать возвращаемые столбцы?Это было бы первым шагом, если это возможно.

0 голосов
/ 21 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...