在下面的查询中,有重复的计算,例如对 的三个调用SUM(p.amount)
。MySQL 是否为每个函数调用重新计算,或者是否有某种内存优化?如果没有,如何优化这种查询以获得最大性能?
似乎在第一次计算后通过别名获得下一个计算会更快total_payemnts
,但这只会引发错误。
SELECT LEFT(c.last_name, 1) AS 'last_names',
SUM(p.amount) AS 'total_payments',
COUNT(p.rental_id) AS 'num_rentals',
SUM(p.amount) / COUNT(p.rental_id) AS 'avg_pay'
FROM customer c
JOIN payment p ON p.customer_id = c.customer_id
GROUP BY LEFT(c.last_name, 1)
ORDER BY SUM(p.amount) DESC;
Run Code Online (Sandbox Code Playgroud)
此查询在MySQL Sakila示例数据库上运行。