我有这样的看法:
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 秒才能完成。
还有其他方法可以优化此查询吗?