From 611069fb656caf7c1b512447260aff3bbd40cbdf Mon Sep 17 00:00:00 2001 From: "Didier (did)" Date: Tue, 11 Apr 2023 11:21:08 +0000 Subject: [PATCH] [IMP] mail: improve get_mention_suggestion performance MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Order by" makes the query really slow. On a database with 1000000 partner and 10000 user, this query goes from 5.5s to 600ms. Once cached by Pgsql it goes down below 100ms. task-2982401 closes odoo/odoo#118198 Signed-off-by: Sébastien Theys (seb) Co-authored-by: Sébastien Theys --- addons/mail/models/res_partner.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/mail/models/res_partner.py b/addons/mail/models/res_partner.py index 516ffa9cb23..7b5d4d2949d 100644 --- a/addons/mail/models/res_partner.py +++ b/addons/mail/models/res_partner.py @@ -335,7 +335,11 @@ class Partner(models.Model): remaining_limit = limit - len(partners) if remaining_limit <= 0: break - partners |= self.search(expression.AND([[('id', 'not in', partners.ids)], domain]), limit=remaining_limit) + # We are using _search to avoid the default order that is + # automatically added by the search method. "Order by" makes the query + # really slow. + query = self._search(expression.AND([[('id', 'not in', partners.ids)], domain]), limit=remaining_limit) + partners |= self.browse(query) partners_format = partners.mail_partner_format() if channel_id: member_by_partner = {member.partner_id: member for member in self.env['mail.channel.member'].search([('channel_id', '=', channel_id), ('partner_id', 'in', partners.ids)])}