Интересная проблема. Я не верю, что можно просто получить ключи в одиночку.
Один из подходов - хранить ключи в собственной базе данных с нулевыми данными. Если вы не можете выдержать дублирование, я думаю, что наилучшим подходом будет массовое чтение, так как вы по определению имеете хороший локальный эталон для вашего диапазона значений.
Используйте флаг DB_MULTIPLE_KEY в вашем вызове DBC :: get () и большой буфер DBT для данных. Используйте DbMultipleKeyDataIterator для итерации блока массового извлечения.
Это должно улучшить ситуацию, так как последовательные конечные элементы в вашем поиске приведут к эффективному копированию страницы во временный буфер DBT, который вы используете в DBC :: get.