我正在使用以下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...
transactions
表中有 130,000行。
学生采用以下形式:
Frog_ID UPN Firstname Surname Intake_Year
101234 K929221234567 Madeup Student 2010
student
表中有 835行。
索引
有没有办法让这个查询更有效率?
答案 0 :(得分:2)
你们都使用Recepient_ID
加入并按照它进行分组,但它没有编入索引,所以我认为这就是问题所在。
尝试添加transactions.Recepient_ID
作为索引。