From 3e5880236e4a5ed11efa5878f00520e6bda0bea1 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Tue, 28 Mar 2023 10:42:46 +0000 Subject: [PATCH] [FIX] survey*: add missing index FKs for performance 1) `survey_user_input.slide_partner_id`: this is a sparse column (so using `btree_not_null` means a very small footprint). But it makes a ton of difference when trying to delete a slide.slide.partner entry. e.g. on a db with 500k survey inputs, the deletion of 1000 `slide.slide.partner` records goes from 40s to 100ms (400x speedup) 2) `survey_user_input_line.survey_id`: this is the inverse field of the `survey_user_input.user_input_line_ids` O2M field, so the index is always useful to retrieve the O2M lines. It will also marginally help for cascading the deletion of any `survey_user_input` record from case 1). closes odoo/odoo#116875 X-original-commit: 2dc929cd530ba4fd80c17f91af2bfad02a819dd6 Signed-off-by: Olivier Dony (odo) --- addons/survey/models/survey_user_input.py | 2 +- addons/website_slides_survey/models/survey_user.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/survey/models/survey_user_input.py b/addons/survey/models/survey_user_input.py index 50f13936c6b..0971bc3186b 100644 --- a/addons/survey/models/survey_user_input.py +++ b/addons/survey/models/survey_user_input.py @@ -614,7 +614,7 @@ class SurveyUserInputLine(models.Model): _order = 'question_sequence, id' # survey data - user_input_id = fields.Many2one('survey.user_input', string='User Input', ondelete='cascade', required=True) + user_input_id = fields.Many2one('survey.user_input', string='User Input', ondelete='cascade', required=True, index=True) survey_id = fields.Many2one(related='user_input_id.survey_id', string='Survey', store=True, readonly=False) question_id = fields.Many2one('survey.question', string='Question', ondelete='cascade', required=True) page_id = fields.Many2one(related='question_id.page_id', string="Section", readonly=False) diff --git a/addons/website_slides_survey/models/survey_user.py b/addons/website_slides_survey/models/survey_user.py index 5d23035dae0..6561f04739b 100644 --- a/addons/website_slides_survey/models/survey_user.py +++ b/addons/website_slides_survey/models/survey_user.py @@ -11,7 +11,8 @@ class SurveyUserInput(models.Model): slide_id = fields.Many2one('slide.slide', 'Related course slide', help="The related course slide when there is no membership information") slide_partner_id = fields.Many2one('slide.slide.partner', 'Subscriber information', - help="Slide membership information for the logged in user") + help="Slide membership information for the logged in user", + index='btree_not_null') # index useful for deletions in comodel @api.model_create_multi def create(self, vals_list):