My inner @garyc40 is saying it's probably overkill, actually :)

However, if I was caching an expensive query, especially on the front-end, but even on potentially busy admin sections like this - I'd use the Transients API.

Something like this - 
```php
if ( false === ( $max_purchase_id = get_transient( 'max_purchase_id' ) ) ) {
       $max_purchase_id = $wpdb->get_var( 'SELECT MAX( id ) FROM ' . WPSC_TABLE_PURCHASE_LOGS );
       set_transient( 'max_purchase_id', $max_purchase_id, DAY_IN_SECONDS ); //Note: DAY_IN_SECONDS and related constants are 3.5+ only.
}
```

Then you'd have an invalidation routine hook into the purchase log action for when logs are added: 
```php
add_action( 'wpsc_purchase_log_insert', function( $log ){ 
     //This is example code only - no anonymous functions in core.
     delete_transient( 'max_purchase_id' );
} );
```
Anyway, that's the basic idea.  The Transients API is great for caching expensive stuff because if a persistent backend cache is present, it will use that - otherwise, it caches to the options DB table.