2011-09-23 72 views
1

据我所知,典型数据库表上的索引将提供更高效的行查找。是否存在一个类似的结构来使集合函数的查询更高效?MySQL - 索引加快集合函数的查询

举个例子,假设我有一个像下面的表有大量的行

Employees 
employeeId | office | salary 

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

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

我的引擎是在MySQL

+0

除了手动记录其他地方的最大值外,我没有看到任何解决方法。 – NullUserException

+0

我会想象在'salary'上添加一个索引会加快集合函数MAX(salary)'。不是吗? –

+0

@rfausak:nope,单一领域薪水指数根本无济于事 – zerkms

回答

1

综合指数的MyISAM office + salary是你能做的最好的(如果你不想只是存储在另一个表预先计算的最大值)。

2

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

您还可以使用分析:

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

分区也可能提高查询性能。