diff --git a/addons/delivery/models/stock_picking.py b/addons/delivery/models/stock_picking.py
index 9b2d4a67239de61abafcf015b69433acef5d03e4..492f5eafd30b586296ea25584ce26a2cfe0dac45 100644
--- a/addons/delivery/models/stock_picking.py
+++ b/addons/delivery/models/stock_picking.py
@@ -77,13 +77,17 @@ class StockPicking(models.Model):
 
     @api.depends('move_line_ids', 'move_line_ids.result_package_id')
     def _compute_packages(self):
-        for package in self:
-            packs = set()
-            if self.env['stock.move.line'].search_count([('picking_id', '=', package.id), ('result_package_id', '!=', False)]):
-                for move_line in package.move_line_ids:
-                    if move_line.result_package_id:
-                        packs.add(move_line.result_package_id.id)
-            package.package_ids = list(packs)
+        packages = {
+            res["picking_id"][0]: set(res["result_package_id"])
+            for res in self.env["stock.move.line"].read_group(
+                [("picking_id", "in", self.ids), ("result_package_id", "!=", False)],
+                ["result_package_id:array_agg"],
+                ["picking_id"],
+                lazy=False, orderby="picking_id asc",
+            )
+        }
+        for picking in self:
+            picking.package_ids = list(packages.get(picking.id, []))
 
     @api.depends('move_line_ids', 'move_line_ids.result_package_id', 'move_line_ids.product_uom_id', 'move_line_ids.qty_done')
     def _compute_bulk_weight(self):