[FIX] project: improve performance for burndown chart report

Before this commit when the user wants to see the burndown chart of a
old large project then the report could take more than 20 sec to be
loaded.

This commit adds 2 indexes one on `mail_tracking_value` table
(`mail.tracking.value` model) and the other one on `mail_message` table
(`mail.message` model) to reduce the load of that report to less than
10 sec.

task-3177072

closes odoo/odoo#114114

X-original-commit: c6b355d471889634ae26a020e14c81e9a315b3de
Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
Co-authored-by: Yannick Tivisse <yti@odoo.com>
This commit is contained in:
Xavier BOL (xbo)
2023-03-07 23:09:58 +01:00
committed by Xavier Bol (xbo)
co-authored by Yannick Tivisse
parent c28063baee
commit e2cec54fad
3 changed files with 31 additions and 0 deletions
+12
View File
@@ -7,6 +7,8 @@ from . import report
from . import wizard
from . import populate
from odoo.tools.sql import create_index
def _check_exists_collaborators_for_project_sharing(env):
""" Check if it exists at least a collaborator in a shared project
@@ -21,3 +23,13 @@ def _check_exists_collaborators_for_project_sharing(env):
def _project_post_init(env):
_check_exists_collaborators_for_project_sharing(env)
# Index to improve the performance of burndown chart.
project_task_stage_field_id = env['ir.model.fields']._get_ids('project.task').get('stage_id')
create_index(
env.cr,
'mail_tracking_value_mail_message_id_old_value_integer_task_stage',
env['mail.tracking.value']._table,
['mail_message_id', 'old_value_integer'],
where=f'field={project_task_stage_field_id}'
)
+1
View File
@@ -2,6 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import analytic_account
from . import mail_message
from . import project_milestone
from . import project_project_stage
from . import project_task_recurrence
+18
View File
@@ -0,0 +1,18 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import models
from odoo.tools.sql import create_index
class MailMessage(models.Model):
_inherit = 'mail.message'
def init(self):
super().init()
create_index(
self._cr,
'mail_message_date_res_id_id_for_burndown_chart',
self._table,
['date', 'res_id', 'id'],
where="model='project.task' AND message_type='notification'"
)