Драйвер на Oracle Database JDBC, версии преди 12:
Драйверът разпределя максималния размер за всяка колона, умножен по броя на редовете в fetchSize
преди да изпълните заявката.
Например за VARCHAR(4000)
колона ще задели 8k байта, умножени по fetchSize
.
версии 12 (и по-нови):
Той разпределя приблизително 15 байта на колона на ред в fetchSize
преди да изпълните заявката. След изпълнение драйверът във версия 12 разпределя само толкова, колкото е необходимо за съхраняване на действителните данни за реда.
В резултат на това драйверите на версия 12 обикновено използват значително по-малко памет от драйверите на по-ранните версии.
Вашият пример :
Във вашия пример VARCHAR(20)
може да бъде голям до 40 байта, NUMBER
може да бъде голям до 22 байта и VARCHAR(100)
големи до 100 байта. С fetchSize
настроен на 100, по-старите драйвери биха разпределили (40 + 22 + 100) * 100 = 16k
. Драйверът версия 12 ще разпредели 3 * 15 * 100 = 4.5k
. Има допълнителни разходи и в двата драйвера, които пренебрегвам.