据我所知,典型数据库表上的索引将提供更有效的行查找。是否存在类似的构造来使具有聚合函数的查询更高效?
例如,假设我有一个如下所示的表,其中包含大量行
Employees
employeeId | office | salary
SELECT office, MAX(salary)
FROM Employees
GROUP BY office我想高效地从每个办公室检索员工的MAX()工资。在这种情况下,我不介意额外的插入/更新开销,因为我将相当频繁地执行此查询,而不是非常频繁地写入表。
我的引擎是MySQL上的MyISAM
发布于 2011-09-23 17:24:43
使用EXPLAIN查看查询执行计划。然后添加索引并检查查询执行计划是否有所改进。
您还可以使用性能分析:
mysql> SET profiling=ON;
mysql> SELECT…
mysql> SET profiling=OFF;
mysql> SHOW PROFILES;
mysql> SHOW PROFILE FOR QUERY 1;分区还可以提高查询的性能。
发布于 2011-09-23 12:58:12
综合索引office + salary是您能做的最好的选择(如果您不想只将预计算出的最大值存储在另一个表中)。
发布于 2019-11-05 23:47:51
我发现这是为了寻找另一个问题,但这里应该是给定问题的解决方案:
MySQL文档指出,如果在查询中使用MAX()或MIN()作为唯一的聚合函数,则group by优化是有效的。在这种情况下,group by字段需要是最左边的索引部分。
在您的例子中,一个索引(办公室、薪水)应该可以做到这一点。
这里是文档:https://dev.mysql.com/doc/refman/5.5/en/group-by-optimization.html
https://stackoverflow.com/questions/7524342
复制相似问题