When implementing persistent objects on a relational database, a major perf
ormance issue is prefetching data to minimize the number of round-trips to
the database. This is especially hard with navigational applications, since
future accesses are unpredictable. We propose the use of the context in wh
ich an object is loaded as a predictor of future accesses, where a context
can be a stored collection of relationships, a query result, or a complex o
bject. When an object O's state is loaded, similar state for other objects
in O's context is prefetched. We present a design for maintaining context a
nd for using it to guide prefetch. We give performance measurements of its
implementation in Microsoft Repository, showing up to a 70% reduction in ru
nning time. We describe several variations of the optimization: selectively
applying the technique based on application and database characteristics,
using application-supplied performance hints, using concurrent database que
ries to support asynchronous prefetch, prefetching across relationship path
s, and delayed prefetch to save database round-trips.