Как уже упомянуто в других ответах, используйте BufferedInputStreams.
После этого, я предполагаю, что размер буфера действительно не имеет значения. Любой программа является вводом-выводом связанный, и растущий размер буфера по значению по умолчанию BIS, не окажет большого влияния на производительность.
Или программа является зависящим от ЦП в MessageDigest.update (), и большинство времени не потрачено в коде приложения, так тонкая настройка, это не поможет.
(Хм... с несколькими ядрами, потоки могли бы помочь.)
Вам нужно будет использовать UNION
для объединения результатов двух запросов. В вашем случае:
SELECT ChargeNum, CategoryID, SUM(Hours)
FROM KnownHours
GROUP BY ChargeNum, CategoryID
UNION ALL
SELECT ChargeNum, 'Unknown' AS CategoryID, SUM(Hours)
FROM UnknownHours
GROUP BY ChargeNum
Примечание. Если вы используете UNION ALL
, как указано выше, это не медленнее, чем выполнение двух запросов по отдельности, поскольку при этом не выполняется проверка дубликатов.
В ожидаемом результате вторая последняя сумма строки неверна, она должна быть 40 в соответствии с данными в ваших таблицах, но вот запрос:
Select ChargeNum, CategoryId, Sum(Hours)
From (
Select ChargeNum, CategoryId, Hours
From KnownHours
Union
Select ChargeNum, 'Unknown' As CategoryId, Hours
From UnknownHours
) As a
Group By ChargeNum, CategoryId
Order By ChargeNum, CategoryId
А вот вывод:
ChargeNum CategoryId
---------- ---------- ----------------------
111111 1 40
111111 2 50
111111 Unknown 70
222222 1 40
222222 Unknown 25.5