【发布时间】:2012-12-08 08:27:59
【问题描述】:
我有这样的看法:
CREATE VIEW invoicereport
SELECT i.ID, SUM(o.Amount * o.Price) AS Total
FROM invoice i
JOIN `order` o ON i.ID = o.InvoiceID
GROUP BY i.ID
直接运行此查询需要 0.03 秒。
但是运行视图需要 2 秒。即使我这样做 SELECT * FROM invoicereport WHERE ID=9000 仍然需要 2 秒。
所以我将视图重写为:
CREATE VIEW invoicereport
SELECT i.ID, (SELECT SUM(Amount * Price) FROM `order` WHERE InvoiceID=i.ID) AS Total
FROM invoice i
认为子查询只会针对 ID 9000 执行。
然后当我执行SELECT * FROM invoicereport WHERE ID=9000 时,它会更慢,需要 3 秒才能完成。
还有其他方法可以优化这个查询吗?
【问题讨论】:
标签: mysql optimization view aggregate