2015-08-15 2 views
-1

В коде Java я пытаюсь получить 3500 строк из DB (Oracle). Для загрузки данных требуется почти 15 секунд. Я подошел к сохранению результата в кеше и извлечению из него тоже. Я использую простой оператор Select и отображаю 8 столбцов из одной таблицы (без использования соединений). Список использования для сохранения данных из БД и использования его в качестве источника для Datatable. Я также думал со стороны аппаратного обеспечения, такого как объем оперативной памяти, Хранение, скорость сети и т. Д. ... Он превосходит минимальные требования. Можете ли вы помочь сделать это быстрее (не нужно больше 3 секунд)?Оптимизация производительности в Java

+3

Пожалуйста, отправьте запрос; здесь есть много людей, которые могли бы предложить предложения по его ускорению. –

+0

Если 3.5k строк занимает 15 секунд, это, скорее всего, плохо спланированный/плановый запрос. Но без более подробной информации .. (запрос может быть не SARGABLE независимо от объединений, например, не может быть подходящего индекса для покрытия условий) – user2864740

+0

Проведенное время почти наверняка полностью находится в драйвере данных или JDBC. Добавление записи 3500 в список на Java должно занимать миллисекунды или меньше. –

ответ

0

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

+1

15 секунд - 15 секунд (и слишком длинный) для «простого запроса». Использование потока может * скрыть * проблему, возможно (в зависимости от того, как используется результат), но не будет * исправлять * проблему. – user2864740

0

Это наиболее вероятно, что основной проблемой является то, что у вас есть один или несколько из следующих действий:

  • плохо спроектированные схемы,
  • плохо спроектированные запрос,
  • сильно перегружен базы данных, и/или
  • плохо перегруженное/недоопределенное сетевое соединение между базой данных и вашим клиентом.

Никакого изменения кода на стороне клиента (Java), вероятно, не будет иметь существенного отличия (например, увеличение в 5 раз) ... если вы не делаете что-то сумасшедшее в том, как вы строите список, или узкое место находится в отображаемом коде, а не в поиске.


Вы должны использовать некоторые на стороне клиента и сервера на стороне инструменты, чтобы выяснить, является ли реальным узким местом является клиент, сервер или сеть. Затем используйте эти результаты, чтобы решить, где сосредоточить ваше внимание.

Смежные вопросы