我有这个查询来计算每个地区的成功总数。这个查询可以工作,但是输出数据需要2分钟,我有15k行。
SELECT
nsf.id,
nsf.province,
nsf.city,
nsf.district,
nsf.shipping_fee,
IFNULL((SELECT COUNT(orders.id) FROM orders
JOIN users ON orders.customer_id = users.id
JOIN addresses ON addresses.user_id = users.id
JOIN subdistricts ON subdistricts.id = addresses.subdistrict_id
WHERE orders.status_tracking IN ("Completed","Successful Delivery")
AND subdistricts.ninja_fee_id = nsf.id
AND orders.transfer_to = "cod"),0) as success_total
from ninja_shipping_fees nsf
GROUP BY nsf.id
ORDER BY nsf.province;
输出应该是这样的
你能帮我提高性能吗?谢谢
1条答案
按热度按时间1szpjjfi1#
尝试在联接的“派生表”而不是“相关子查询”中执行分组/计算
“相关子查询”通常是性能不佳的一个原因。
其他注意事项,我更喜欢使用coalesce(),因为它是ansi标准,现在在大多数sql实现中都可用。单引号通常用于表示字符串和文本。