2

我正在使用以下 SQL 语句:

SELECT
  SUM(t.Points) AS `Points`,
  CONCAT(s.Firstname, " ", s.Surname) AS `Name`
FROM transactions t
INNER JOIN student s
  ON t.Recipient_ID = s.Frog_ID
GROUP BY t.Recipient_ID

查询需要21 秒才能运行。奇怪的是,即使我跑LIMIT 0, 30起来仍然需要20.7秒!

如果我EXPLAIN在这个语句上运行,结果如下:

id  select_type table   type    possible_keys   key     key_len     ref     rows        Extra
1   SIMPLE      s       ALL     PRIMARY         NULL    NULL        NULL    877         Using temporary; Using filesort
1   SIMPLE      t       ALL     NULL            NULL    NULL        NULL    135140      Using where

交易采用以下形式:

Transaction_ID  Datetime    Giver_ID    Recipient_ID    Points  Category_ID     Reason
1               2011-09-07  36754       34401           5       6               Gave excellent feedback on the new student noteboo...

表中有130,000 行transactions


学生采取以下形式:

Frog_ID UPN             Firstname   Surname     Intake_Year
101234  K929221234567   Madeup      Student     2010

表中有835 行student


索引

交易指数

学生索引


有没有办法让这个查询更有效率?

4

1 回答 1

2

你们都使用Recepient_ID它并按它分组,但它没有被索引,所以我认为这是问题所在。

尝试添加transactions.Recepient_ID为索引。

于 2013-01-23T12:28:01.137 回答