2012-10-12 34 views
0

我询问了this question,其中我解释了我正在尝试从员工成员(包括那些分配了零的员工)获得每周点分配。添加索引以优化查询并分析EXPLAIN结果

我有两个表:

职员(140行)IDFirstnameSurnamePositionFacultySubjectHoursAllocation

交易(140,000行)Transaction_IDDatetimeGiver_ID,,Points,Category_ID,Reason

的SQL语句我一直是这样的:

SELECT 
    CONCAT(s.Firstname, " ", s.Surname) AS `Staff Name`, 
    COALESCE(SUM(t.Points), 0) AS `Points Allocated` 
FROM staff s 
LEFT JOIN transactions t ON t.Giver_ID = s.ID and t.Datetime >='2012-10-08' 
GROUP BY s.ID 
ORDER BY `Points Allocated` ASC 

如预期的查询工作,但它采取〜6秒运行

唯一的index我在任一桌上都有他们的主键。

这个查询EXPLAIN结果指出:

Reward System - EXPLAINed query

可悲的是,我不知道这意味着什么!我该如何优化我的查询或表以提高此查询的运行时间?

由于提前,

+0

指数't.Giver_ID'和't.Datetime'和检查会发生什么。 –

+0

啊,好多了..!现在0.9秒。我能做的就是@ N.B。吗? – dunc

+0

还有其他的优化方法,如使用InnoDB引擎和增加它的'innodb_buffer_pool_size'变量,所以检查你使用的是什么引擎,如果InnoDB已经不是InnoDB,只需将表更改为InnoDB即可。 –

回答

0

您是否尝试过简单地增加对transaction.Giver_Id的索引键也transaction.dateTime