You haven't said how that DB / table is used later. But If your use case is really as described, i.e. only fixed-size columns, then you can have random access into your data, by *direct indexing*, whether it on-disk or in-memory, if you implement your own virtual table (and indexing) on top of that *regular / tabular* data. Might end up bigger that the SQLite DB, which uses [varints][VARINT], if you intergers are small. But the extra space is worth it, for direct random-access addressing, performance-wise. A long time ago, I measured vtables over C++ std::unordered_map-like containers of structs, being 5x faster than equivalent regular in-memory SQLite tables. And that was even w/o direct addressing like in your use-case (node-based hash map, so each row is a separate alloc / address). Short of the above, you've covered all the bases, from what you wrote. FWIW. --DD [VARINT]: https://www.sqlite.org/fileformat.html#b_tree_pages