【发布时间】:2021-11-06 01:06:52
【问题描述】:
给定一个示例查询,例如
SELECT IF(
ABS(sum(grades) / count(*) * 100) < 1,
ROUND(sum(grades) / count(*) * 100, 2),
IF(ABS(sum(grades) / count(*) * 100) < 10,
ROUND(sum(grades) / count(*) * 100, 1),
ROUND(sum(grades) / count(*) * 100, 0)
)
)
from important_table
group by timestamp
是否可以不必每次分组计算总和 3 次,而是预先将 sum(grades) / count(*) * 100 存储在一个变量中,仍然按时间戳分组,并在查询中使用它?这看起来有点脏,而且对我来说是重复的。
这是一个真正的优化可能性吗?还是mysql在执行查询时无论如何都会缓存它?
【问题讨论】:
-
永远不要使用
count(*),而是使用count(1)。它要快得多。另外,看看mysqlAVG函数
标签: mysql variables optimization