[IMP] core: remove useless mapped call when calling filtered with a str

The mapped call is supposed to populate the cache, but that's already
taking care of by prefetching. It ends up adding an overhead instead.

The perf improvement is more noticeable on large recordsets.
For example, on a database populated with 100k res.partner records.

Before:

.. code-block:: python

    partners = env["res.partner"].search([])
    partners.filtered("name")  # warm up
    timeit.timeit(lambda: partners.filtered("name"), number=10)
    # result: 7.15

After:

.. code-block:: python

    partners = env["res.partner"].search([])
    partners.filtered("name")  # warm up
    timeit.timeit(lambda: partners.filtered("name"), number=10)
    # result: 4.67

closes odoo/odoo#105350

Signed-off-by: Rémy Voet <ryv@odoo.com>
This commit is contained in:
Ivàn Todorovich
2022-11-14 16:21:24 +01:00
parent 5c08d0a47c
commit 382d6924b8
-2
View File
@@ -5382,8 +5382,6 @@ class BaseModel(metaclass=MetaModel):
if isinstance(func, str):
name = func
func = lambda rec: any(rec.mapped(name))
# populate cache
self.mapped(name)
return self.browse([rec.id for rec in self if func(rec)])
def grouped(self, key):