[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) <dle@odoo.com> Signed-off-by: Benjamin Hanquin (beha) <beha@odoo.com> Co-authored-by: Julien Launois (jula) <jula@odoo.com>
This commit is contained in:
co-authored by
Julien Launois
parent
2487d8d278
commit
f73f764284
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user