Java - улучшения производительности DB2 - PullRequest
1 голос
/ 23 мая 2011

У нас есть оператор SELECT, который займет ок. 3 секунды, чтобы выполнить. Мы вызываем этот запрос DB2 внутри вложенного цикла while.

Ex:

В то время как (hashmap1.hasNext ()) { в то время как (hashmap2.hasNext ()) { SQL-запрос } }

Проблема в том, что внешний цикл while будет выполняться прибл. 1200 раз и внутренний цикл while будет выполняться 200 раз. Это означает, что SQL будет вызываться 1200 * 200 = 240 000 раз. Прибл. каждая итерация цикла Outer While займет 150 секунд. Итак, 1200 * 150 секунд = 50 часов.

Мы можем позволить себе только около 12-15 часов времени, прежде чем мы начнем следующий процесс.

Есть ли способ сделать этот процесс быстро? Любая новая технология, которая может помочь нам быстрее получать эти записи из DB2.

Любая помощь будет принята с благодарностью.

Примечание. Мы уже рассмотрели все возможные способы сокращения числа итераций.

1 Ответ

4 голосов
/ 23 мая 2011

Похоже, вы пытаетесь использовать средний уровень для чего-то, для чего лучше подходит сама база данных.Это классическая проблема с запросом «N + 1».

Я бы переписал эту логику для выполнения полностью в базе данных как правильно проиндексированный JOIN.Это не только сократит всю эту сеть назад и вперед, но и позволит оптимизатору базы данных перенести и сэкономит вам затраты на перевод всех этих данных на средний уровень для обработки.

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