| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Оптимизация подсчета суммы |
| Автор: scyther 2.6.2008, 14:37 | ||
| Есть метод getMiddleTimeView который возвращает среднее время просмотра. Список list формируется по SQL запросу, который возвращает около 1'000'000 элементов. Вот задача: как оптимизировать этот метод? Скорость выдачи результата очень медленная :( порядка 30..50 секунд sumSessions - тут можна получить сумму из SQL, а как быть с allTime?
|
| Автор: LSD 2.6.2008, 14:52 |
| Поподробней насчет данных, как что хранится. |
| Автор: w38 2.6.2008, 14:52 |
| что сразу бросилось в глаза: 1) проход по списку сделать итератором, вместо for (int i = 0; i < list.size(); i++) 2) избавиться от неявных оберток Double -> double про подсчет allTime на стороне сервера, что мешает использовать условные констуркции в SQL-выражениях, процедруах или представлениях ? |
| Автор: scyther 2.6.2008, 15:17 | ||
LSD: вот тип ArrayList'а, остальное впринципе видно в первом посте
w38: "использовать условные констуркции в SQL-выражениях" - а можна, пожалуста, подробней об етом (или ссылки какие) |
| Автор: Kangaroo 2.6.2008, 15:17 |
зачем три раза рыться по массиву? Раз достань и используй. Может можно СКЛюм сделать sum(TimeIn*Sessions), я не уверен. |
| Автор: scyther 2.6.2008, 15:39 | ||||
| Kangaroo: "sum(TimeIn*Sessions), я не уверен" можно. Немного переписал метод
Новый код - новые ошибки
|
| Автор: Platon 2.6.2008, 15:54 | ||
| В миллион записей, ты конечно прикалываешься выгружать в память! Раз ты игнорируешь получать данные с помощью SQL-скрипта, тогда прими к сведению: Лучше делать страничную выгрузку данных. Что имею ввиду:
|
| Автор: scyther 2.6.2008, 17:49 |
| Platon: спасиба, вопрос решен |
| Автор: LSD 2.6.2008, 18:49 |
Я имел в виду, пояснить что там к чему. По коду не очень понятен смысл timeIn и sessions. А вообще самое быстрое и производительное это посчитать сумму в БД. |
| Автор: scyther 3.6.2008, 13:07 |
| LSD: так и сделал, все в sql считал, теперь работает за 0.5 секунды |