mysql - 使用聚合函数优化 MySQL View

标签 mysql optimization view aggregate

我的看法是:

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 秒。 但是运行 View 需要 2 秒。即使当我执行 SELECT * FROM invoicereport WHERE ID=9000 时,它仍然需要 2 秒。

所以我将 View 重写为:

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 秒才能完成。

还有其他方法可以优化这个查询吗?

最佳答案

我觉得这些表没有必要join,只要order分组就可以了。 (只是我的观点)。像这样:

CREATE VIEW INVOICEREPORT
SELECT O.INVOICEID as ID, SUM(O.AMOUNT * O.PRICE) AS TOTAL
FROM `ORDER` O
GROUP BY O.INVOICEID

然后你就可以和其他人一起加入这个 View 了。并在 order 上使用索引。

关于mysql - 使用聚合函数优化 MySQL View,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13775806/

相关文章:

sql - 查询优化

使用预取优化

swift - 如何在 Swift 中子类化自定义 UIViewController?

java - android获取OnTouchEvent即使应用程序不活动,java空指针

MySQL:如果包含操作,则查询用户标识

python - Python 中使用随机梯度下降的岭回归

mysql - 在 Mavericks 上使用 Homebrew 安装 MySQL 时出现问题

c++ - 多个可互换 View (MFC/C++)

php - 路由到 Controller

php - 有什么解决方案可以在浏览器关闭时更新数据库吗?