From f73f7642845f78b335e102eca0b31a75f0a36d07 Mon Sep 17 00:00:00 2001 From: "Benjamin Hanquin (beha)" Date: Tue, 12 Dec 2023 10:44:52 +0000 Subject: [PATCH] [PERF] account: Imp Tax Report Account>Tax Issue: The query for the Tax Report Account>Tax is slow. Analyze: The query for the Tax Report is huge, and exceeds the join_collapse_limit threshold (https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-JOIN-COLLAPSE-LIMIT) of postgresql (8 by default and on our servers). It is then needed to help the query planner to optimize this query. Running the query with increased join_collapse_limit and checking the explain analyze, helps in this process. Fix: The query planer with increased join_collapse_limit made the res_currency joins at the very end of a truncated query. Moving the res_currency join help as the inner join is made on AM^2 on current position. Moving it after the base_line reduce it back to AM^1. Benchmark: | # Input data | Before PR | After PR | |:-------------:|:----------:|:---------:| | 271000 AM | 900 s | 13.24 s| | 25000 AM | 180 s | 1.5 s | | 51 AM (demo data) |52ms | 80ms | Related task: opw-3581671 closes odoo/odoo#148740 X-original-commit: b92b6846bfa7de8a41a6808e347fb78980baa4eb Signed-off-by: Denis Ledoux (dle) Signed-off-by: Benjamin Hanquin (beha) Co-authored-by: Julien Launois (jula) --- addons/account/models/account_move_line_tax_details.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/account/models/account_move_line_tax_details.py b/addons/account/models/account_move_line_tax_details.py index db312d3550c..afd2970f227 100644 --- a/addons/account/models/account_move_line_tax_details.py +++ b/addons/account/models/account_move_line_tax_details.py @@ -165,10 +165,6 @@ class AccountMoveLine(models.Model): tax_rep.id = account_move_line.tax_repartition_line_id JOIN account_tax tax ON tax.id = account_move_line.tax_line_id - JOIN res_currency curr ON - curr.id = account_move_line.currency_id - JOIN res_currency comp_curr ON - comp_curr.id = account_move_line.company_currency_id JOIN account_move_line_account_tax_rel tax_rel ON tax_rel.account_tax_id = COALESCE(account_move_line.group_tax_id, account_move_line.tax_line_id) JOIN account_move move ON @@ -194,6 +190,10 @@ class AccountMoveLine(models.Model): OR base_line.analytic_distribution = account_move_line.analytic_distribution ) {extra_query_base_tax_line_mapping} + JOIN res_currency curr ON + curr.id = account_move_line.currency_id + JOIN res_currency comp_curr ON + comp_curr.id = account_move_line.company_currency_id LEFT JOIN affecting_base_tax_ids tax_line_tax_ids ON tax_line_tax_ids.id = account_move_line.id JOIN affecting_base_tax_ids base_line_tax_ids ON base_line_tax_ids.id = base_line.id WHERE account_move_line.tax_repartition_line_id IS NOT NULL