У меня странная проблема с запросом, выполняющимся в моем веб-приложении JDeveloper ADF.Это простая форма поиска, выдающая оператор выбора в базу данных Oracle 10g.Когда запрос отправлен, среда ADF (первый) выполняет запрос, а (второй) выполняет тот же запрос, заключенный в «select count(1) from (...query...)
» - цель здесь состоит в том, чтобы получить общее количество строк и отобразить «Далее».10 результатов »навигационных элементов управления.
Пока все хорошо.Проблема заключается в невероятной производительности, которую я получаю от второго запроса (с «count(1)
»).Чтобы исследовать проблему, я скопировал / вставил / запустил запрос в SQL Developer и был удивлен, увидев гораздо лучший ответ.
При сравнении выполнения запросов в ADF и SQL Developer я принял все меры для обеспечения репрезентативной средыдля обоих исполнений: - только что перезапущенная база данных - то же самое для OC4J. Таким образом, я могу быть уверен, что разница не связана с кэшированием и / или буферизацией, в обоих случаях БД и сервер приложений были только что (повторно) запущены.
Трассировки, которые я выбрал для обеих сессий, иллюстрируют ситуацию:
Запрос выполняется в ADF:
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.97 0.97 0 0 0 0
Fetch 1 59.42 152.80 35129 1404149 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 60.39 153.77 35129 1404149 0 1
Тот же запрос в SQL Developer:
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 1.02 1.16 0 0 0 0
Fetch 1 1.04 3.28 4638 4567 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 2.07 4.45 4638 4567 0 1
Заранее благодарим за любые комментарии или предложения!