我有一个用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。
我们将不胜感激收到任何建议。
劳拉
答案 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
,看看是否有帮助。