1

据我了解,典型数据库表上的索引将提供更有效的行查找。是否存在类似的构造来使使用聚合函数的查询更有效?

例如,假设我有一个像下面这样的表,其中包含大量行

Employees
employeeId | office | salary

SELECT office, MAX(salary)
FROM Employees
GROUP BY office

我想有效地检索MAX()每个办公室员工的工资。在这种情况下,我不介意额外的插入/更新开销,因为我会经常进行此查询,而不是经常写入表。

我的引擎是 MySQL 上的 MyISAM

4

3 回答 3

2

使用 EXPLAIN 查看查询执行计划。然后添加一个索引并检查查询执行计划是否有所改善。

您还可以使用分析:

mysql> SET profiling=ON;
mysql> SELECT…
mysql> SET profiling=OFF;
mysql> SHOW PROFILES;
mysql> SHOW PROFILE FOR QUERY 1;

分区还可以提高查询的性能。

于 2011-09-23T09:24:42.993 回答
1

复合索引office + salary是您能做的最好的(如果您不想只将预先计算的最大值存储在另一个表中)。

于 2011-09-23T04:58:12.170 回答
1

发现这个正在寻找另一个问题,但这里应该是给定问题的解决方案:

MySQL 文档指出,如果您使用 MAX() 或 MIN() 作为查询中唯一的聚合函数,则按优化分组有效。在这种情况下,您的分组依据字段需要是最左边的索引部分。

在您的情况下,索引(办公室,薪水)应该可以解决问题。

这里的文档:https ://dev.mysql.com/doc/refman/5.5/en/group-by-optimization.html

于 2019-11-05T15:47:51.033 回答