[IMP] stock_account: stock_history slow read_group

On a given instance with 600 000 stock.history, the query changed by
this commit takes:

- before this change => 32 minutes
- after this change => 20 seconds

opw-685747
This commit is contained in:
Nicolas Lempereur
2016-09-30 12:58:45 +02:00
parent 00aab045b0
commit c8ca71fc62
@@ -56,11 +56,11 @@ class stock_history(osv.osv):
for ids in group_lines.values():
for product_id in ids:
line_ids.add(product_id)
line_ids = list(line_ids)
lines_rec = {}
if line_ids:
cr.execute('SELECT id, product_id, price_unit_on_quant, company_id, quantity FROM stock_history WHERE id in %s', (tuple(line_ids),))
lines_rec = cr.dictfetchall()
move_ids = tuple(abs(line_id) for line_id in line_ids)
cr.execute('SELECT id, product_id, price_unit_on_quant, company_id, quantity FROM stock_history WHERE move_id in %s', (move_ids,))
lines_rec = tuple(rec for rec in cr.dictfetchall() if rec['id'] in line_ids)
lines_dict = dict((line['id'], line) for line in lines_rec)
product_ids = list(set(line_rec['product_id'] for line_rec in lines_rec))
products_rec = self.pool['product.product'].read(cr, uid, product_ids, ['cost_method', 'id'], context=context)