mysql查询优化器

时间:2018-09-22 19:44:28

标签: mysql sql query-optimization

我有一个用mysql编写的查询,感觉像是要花大量的时间才能完成。我确实需要加快此查询的速度,它需要超过7个小时才能完成。它正在查询的表中有200万行-Historic_runner_races。我考虑过很多可以优化它的方法,我还尝试了sql server,以防万一。我研究了所有不同类型的索引组合,发现它们并没有在整个运行时间内产生巨大的变化。

查询为

    insert into smartform.historic_jockey
    SELECT runners.id, 
     ( select count(1) 
      FROM smartform.historic_runners_races ru
     where ru.jockey_id = runners.jockey_id 
     and ru.race_id < runners.race_id 
     and ru.finish_position =  1
     ) jockeyWins

    FROM smartform.historic_runners_races as runners ;

我真的很茫然。我拥有的索引分别位于Runner_is,race_id和jockey_id,race_id,finish_position。

我们将不胜感激收到任何建议。

劳拉

1 个答案:

答案 0 :(得分:2)

对于此查询:

insert into smartform.historic_jockey (runner_id, jockyWins )
    select runners.id, 
           (select count(1) 
            from smartform.historic_runners_races ru
            where ru.jockey_id = runners.jockey_id and
                  ru.race_id < runners.race_id and
                  ru.finish_position =  1
           ) as jockeyWins
    from smartform.historic_runners_races runners ;

对于此查询,您需要historic_runners_races(jocky_id, finish_position, race_id)上的索引。独立运行select,看看是否有帮助。