On large recordsets I got some severe performance issues while browsing through an inherits relation.
For example I have a batch process exporting a csv file with products variants:

I have to export 50.000 products.

If I do :
`variant.categ_id` It takes a very long time to get the result.

If I do:
`variant.product_tmpl_id.categ_id` The result is immediate

The problem is that the global perfomance of the application is impacted by this problem.

For example my POS takes more than 15 minutes to load. Because I have 26.000 products and the compute price method uses a lot browsing through the inherits such like `product.cated_id`, `product.uom_id` and they all takes a huge time to compute.

Same issue in this case.

If I do :
`variant.price` It takes a very long time to get the result.

If I do:
`variant.product_tmpl_id.price` The result is immediate

Could you help me ?


Simple way to reproduce:

1/ Create a new database and install sale module
2/ Launch following script through odoo shell :

```python
# -*- coding: utf-8 -*-
import logging

_logger = logging.getLogger(__name__)
self = self  # noqa

nb_product = 50000

i = 0
while i < nb_product:
    prod = self.env['product.template'].create({'name': 'product_%s' % i})
    i += 1
    if i % 1000 == 0:
        self.env.cr.commit()
        _logger.info("%s Products Created" % i)
```

2/ Launch following script through odoo shell :
```python
# -*- coding: utf-8 -*-
import logging

_logger = logging.getLogger(__name__)
self = self  # noqa


products = self.env['product.product'].search([])

for product in products:
    # Immediate response
    _logger.info('Category Template %s' % product.product_tmpl_id.categ_id)
    # Lagging response
    _logger.info('Category Variant %s' % product.categ_id) 
    break
```
""" Reflect the model and initialize the database schema of ``self``:
        - create the corresponding table in database,
        - add the parent columns in database,
        - add the '_log_access' columns if required,
        - report on database columns no more existing in ``self._fields``,
        - remove no more existing not null constraints,
        - alter existing database columns to match ``self._fields``,
        - create database tables to match ``self._fields``,
        - add database indices to match ``self._fields``,
        - save in self._foreign_keys a list a foreign keys to create (see
          _auto_end).
        Note: you should not override this method. Instead, you can modify the
        model's database schema by overriding method :meth:`~.init`, which is
        called right after this one.
        """
        assert 'todo' in self._context, "Context not passed correctly to method _auto_init()."
        type(self)._foreign_keys = set()
        raise_on_invalid_object_name(self._name)
        
        
        
        self = self.with_context(prefetch_fields=False)
        cr = self._cr
        parent_store_compute = False
        stored_fields = []              
        todo_end = self._context['todo']
        update_custom_fields = self._context.get('update_custom_fields', False)
        self._field_create()
        create = not self._table_exist()