我有这个视图:
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秒钟才能完成。
是否有其他优化此查询的方法?