【发布时间】:2018-03-28 04:55:55
【问题描述】:
我有一个查询,显示每个产品的销售量、小计和总销售量的总和。问题是执行时间太长。我做错了吗?我需要您的帮助来优化查询。另外,我应该按 sd.Product_Id 还是 p.Product_Name 分组才可以?
SELECT p.Product_Name `Product Name`,
SUM(sd.Quantity) `Quantity Sold`,
SUM(sd.Subtotal) `Subtotal`,
SUM(sd.Discount_Value) `Total Discount`,
SUM(sd.Total) `Total`
FROM Sales_Detail sd
JOIN Product p ON sd.Product_Id = p.Id
WHERE DATE(sd.Purchase_Date) BETWEEN DATE('2017-08-21')
and date('2017-08-25')
GROUP BY p.Product_Name;
【问题讨论】:
-
如果
DATE(sd.Purchase_Date)正在转换日期时间字段,请停止这样做。将您的操作数之间的操作数也指定为日期时间类型。 -
您应该将其发布为答案,而不仅仅是评论。我的原始查询是 200 多秒。现在缩短到 3 秒!谢谢!
-
但是返回的原始行是1091。修改后的查询只返回973。我仍然需要检查哪些行被删除了
-
不客气,祝你好运。
-
见:Why should I provide an MCVE for what seems to me to be a very simple SQL query?。此外,关于查询性能的问题也需要给定查询的 EXPLAIN。
标签: mysql sql group-by query-optimization