连接多个表并计算行数时挂起查询

Hanging Query when joining multiple tables and counting rows

我正在尝试编写一个查询,该查询将生成一个商家列表,然后计算他们有多少库存商品以及每个商品有多少订单。商家、库存项目和订单都在不同的表中。我希望 return 看起来像这样:

Site    | Inventory Items | Orders
London  | 7282            | 1234996
Glasgow | 9829            | 734949

我几乎可以立即通过此查询获得站点和库存计数列表:

SELECT M.name AS 'Site',
       COUNT(II.idInventoryItems) AS 'Inventory Items',
FROM Merchants M
JOIN
  (SELECT idMerchants,
          idInventoryItems
   FROM InventoryItems) AS II ON II.idMerchants = M.idMerchants
GROUP BY M.name

而且我可以通过非常相似的查询获得站点和订单列表。但是当我将两者结合起来时,查询会无限期挂起,我必须取消查询。这是我一直在使用的完整查询:

SELECT M.name AS 'Site',
       COUNT(II.idInventoryItems) AS 'Inventory Items',
       COUNT(O.idOrders) AS 'Orders'
FROM Merchants M
JOIN
  (SELECT idMerchants,
          idInventoryItems
   FROM InventoryItems) AS II ON II.idMerchants = M.idMerchants
JOIN
  (SELECT idMerchants,
          idOrders
   FROM Orders) AS O ON O.idMerchants = M.idMerchants
GROUP BY M.name

我尝试做的事情是否可以通过相当快的查询来实现?如果是这样,我做错了什么?

试试这个。将计数移动到派生的 table 将为您提供连接所需的数据,并允许 mysql 在出于性能目的需要时使用 idMerchants 上的索引进行优化。然后,您将加入两个派生的 tables,行数明显减少,这也会提高性能。

SELECT M.name AS 'Site',
   II.count AS 'Inventory Items',
   O.count as 'Orders'
FROM Merchants M
JOIN
  (SELECT idMerchants, COUNT(idInventoryItems) AS 'count'
   FROM InventoryItems GROUP BY idMerchants) AS II ON II.idMerchants = M.idMerchants
JOIN
  (SELECT idMerchants,
      COUNT(idOrders) AS 'count'
   FROM Orders GROUP BY idMerchants) AS O ON O.idMerchants = M.idMerchants