【发布时间】:2019-06-18 18:58:22
【问题描述】:
我有 4 个表,客户、产品、销售和销售项目。我使用下面的查询从中提取数据。
SELECT (
SELECT c.name
FROM Customers c
WHERE s.customer_id=c.id
) customer
,(
Select group_concat(description)
FROM (
SELECT si.id
,si.sale_id
,concat("x", si.Qty, " ", p.name, " ",(si.total)) description
FROM Sale_Items si
LEFT JOIN Products p ON p.id = si.product_id
) p
where s.id = Sale_ID
GROUP BY Sale_ID
) detail,
s.total
FROM Sales s
查询会产生结果,但只有 2000 条记录会变得很慢(需要 114 秒才能完成)
Customer Product Total
--------------------------------------
James x1 ItemA 10.00 75.00
x3 ItemB 15.00
x1 ItemC 20.00
Mark x2 ItemA 10.00 50.00
x2 ItemB 15.00
Bisi x1 ItemC 20.00 30.00
x2 ItemA 10.00
我怎样才能让它更快?
这里已经尝试过了
【问题讨论】:
-
考虑处理应用代码中数据显示的问题。我怀疑生成的查询会更简单更快。
-
实现内联视图
p的成本会很高,因为我们要为销售返回的每一行都这样做。外部查询中的谓词不会被推送到视图定义中(可能在最新版本的 MySQL 中有所更改)。
标签: mysql sql performance select