2011-09-23 70 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; 

分區也可能提高查詢性能。