首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询超过6秒

MySQL查询超过6秒
EN

Stack Overflow用户
提问于 2017-01-14 07:01:28
回答 3查看 465关注 0票数 2

不久前,我在一个特定的查询方面得到了一些帮助。下面是链接:在新列中使用字符串的SQL组

我的查询看起来类似于以下内容:

代码语言:javascript
复制
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个联接。)

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

我已经做了一些研究,听起来我应该能够索引“结果”表上的相关列,以帮助加快速度。但是当我这样做的时候,它实际上把我的查询速度降低到了10秒左右。

对于我能做些什么来改进这个查询有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-14 09:21:51

AFAIK,您正在旋转数据,我认为使用max(case ...) ... group by在旋转数据方面具有良好的性能。

我可以建议您使用以下查询:

代码语言:javascript
复制
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演示]

票数 2
EN

Stack Overflow用户

发布于 2017-01-14 07:21:49

请尝试以下查询:

代码语言:javascript
复制
SELECT
  e.event_date,
  r1.name as class_40_winner,
  r2.name as class_30_winner
FROM
  events e,
  results r1,
  results r2
WHERE
  r1.class = 40 AND
  r2.class = 30 AND
  r1.position = 1 AND
  r2.position = 1 AND
  r1.result_event = e.id AND
  r2.result_event = e.id
票数 1
EN

Stack Overflow用户

发布于 2017-01-14 07:33:26

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41647621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档