首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -使用聚合函数加速查询的索引

MySQL -使用聚合函数加速查询的索引
EN

Stack Overflow用户
提问于 2011-09-23 12:45:17
回答 3查看 4.3K关注 0票数 1

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

例如,假设我有一个如下所示的表,其中包含大量行

代码语言:javascript
复制
Employees
employeeId | office | salary

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

我想高效地从每个办公室检索员工的MAX()工资。在这种情况下,我不介意额外的插入/更新开销,因为我将相当频繁地执行此查询,而不是非常频繁地写入表。

我的引擎是MySQL上的MyISAM

EN

回答 3

Stack Overflow用户

发布于 2011-09-23 17:24:43

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

您还可以使用性能分析:

代码语言:javascript
复制
mysql> SET profiling=ON;
mysql> SELECT…
mysql> SET profiling=OFF;
mysql> SHOW PROFILES;
mysql> SHOW PROFILE FOR QUERY 1;

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

票数 2
EN

Stack Overflow用户

发布于 2011-09-23 12:58:12

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

票数 1
EN

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7524342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档