Currently, references between objects use the OID to perform a lookup in the OID-index to find the target objects' location in the DB.
For rarely changing objects (configurable?) we could also store directly the pageID/txID of the target object. If the target page has the correct txID, then we can directly load the object without going through the OID-index. When the txId mismatches, we still have to go through the OID index.
Problems:
This requires 8+4 additional bytes per reference. This could be made configurable on class level, i.e. we store a flag on the page that indicates whether direct optimistic references are stored or not.
Currently, this would only help during navigation in queries. To make it work with navigation in the client, we would need to store the pageId/txId together in the materialized objects.
Currently, references between objects use the OID to perform a lookup in the OID-index to find the target objects' location in the DB. For rarely changing objects (configurable?) we could also store directly the pageID/txID of the target object. If the target page has the correct txID, then we can directly load the object without going through the OID-index. When the txId mismatches, we still have to go through the OID index.
Problems: