executeQuery выполняется в шесть раз дольше, чем при выполнении запроса в TOAD
Я унаследовал... ну, я думаю, что я могу назвать его "#### Struts-приложением", и мне поручено оптимизировать процесс Леви-Дженнингса, который проверяет, соответствуют ли наши стандарты контроля качества нормам.
Сам процесс работает нормально, но всегда был огромный скачок в производительности, даже если набор данных небольшой. Я проверил время между каждой частью алгоритма и обнаружил, что большой проблемой является метод executeQuery() Java.
Совсем недавно я запустил приложение и записал время выполнения в 10 секунд. ExecuteQuery () сам занял шесть из этих секунд. Мне было любопытно узнать, в чем проблема, я взял запрос в TOAD и дословно запустил его - для его выполнения потребовалась всего 1 секунда.
Я запустил еще больший набор данных, который занял 60 секунд в приложении Levey-Jennings, однако в TOAD он занял 10.
Это вообще проблема с запросом или использование executeQuery() обычно предшествует экстремальному замедлению?
1 ответ
Когда вы запускаете запрос в TOAD (или любой другой IDE), этот инструмент хочет предоставить вам результаты, которые вы видите, как можно быстрее. Обычно они показывают сетку с 10 или 40 строками. Чтобы показать вам первые 10-40 строк как можно быстрее, они намекают на запрос или изменяют среду оптимизации, чтобы получить эти первые строки как можно быстрее.
Здесь вы можете увидеть больше информации о подсказке FIRST_ROWS: http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements006.htm
Запрос в вашем приложении, скорее всего, не использует подсказку FIRST_ROWS. Он хочет ВСЕ строки как можно быстрее. Это не волнует, если первый ряд появляется сразу. Таким образом, среда оптимизации для этих двух запросов различна.
Также не помогает, что TOAD отображает время, необходимое для создания первых строк, потому что это заставляет вас думать, что это время, необходимое для получения всех строк. Однако есть возможность перейти к последнему ряду. Нажмите на это, и вы увидите, что теперь это занимает больше времени.
Надеюсь это поможет.
С Уважением,
Роб.