MySQL Query占用时间超过6秒

时间:2017-01-14 07:01:29

标签: mysql sql indexing query-performance

一段时间后,我得到了一些特定查询的帮助。这是链接:SQL Group BY using strings in new columns

我的查询与此类似:

SELECT    event_data, class_40_winner, class_30_winner
FROM      events e
LEFT JOIN (SELECT result_event, name AS class_40_winner
       FROM   results 
       WHERE  class = 40 AND position = 1) c40 ON e.id = c40.result_event
LEFT JOIN (SELECT result_event, name AS class_30_winner
       FROM   results 
       WHERE  class = 30 AND position = 1) c30 ON e.id = c30.result_event

我现在在我的数据库中输入了足够的数据(22,000行),这个查询需要6秒才能完成。 (我的实际查询大于上面的内容,因为它现在有4个连接。)

我在查询中使用了“Explain”函数来查看。 “结果”表中的每个查询都会引入22,000行,因此这似乎是问题所在。

我做了一些研究,听起来我应该能够在“结果”表中索引相关列以帮助加快速度。但是当我这样做时,它实际上将我的查询减慢到大约10秒钟。

我可以采取哪些建议来改进此查询?

3 个答案:

答案 0 :(得分:2)

AFAIK,您正在转动您的数据,我认为使用max(case ...) ... group by在数据转换方面具有良好的表现。
我建议你改用这个查询:

select event_date
    , max(case when r.class = 40 then name end) `Class 40 Winner`
    , max(case when r.class = 30 then name end) `Class 30 Winner`
from events e
left join results r on e.event_id = r.result_event and r.position = 1
group by event_date;

[SQL Fiddle Demo]

答案 1 :(得分:1)

尝试此查询:

\\

答案 2 :(得分:0)

SELECT e.event_data
     , r.class
     , r.name winner
  FROM events e
  JOIN results r
     ON r.result_event = e.id 
 WHERE  class IN (30,40) 
   AND position = 1

此问题的其余部分是一个简单的显示问题,最好在应用程序代码中解决。