UltraLite User's Guide
Designing UltraLite Applications
UltraLite database internals
UltraLite indexes are B+ trees with very small index entries.
In C/C++ UltraLite databases, each index entry is exactly two bytes, and each index page contains 256 entries. Since index pages are rarely 100% full and each index has some fixed overhead, the memory used by an UltraLite index is more than two bytes per row in the table. The overhead for each index is just over 1 kb per index. Typically, UltraLite index pages on larger tables will be least 85% full.
No similar consistent rule can be given for the memory requirements of UltraLite Java databases.