MySQL оптимизатор запросов - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть запрос, написанный на mysql, который, как мне кажется, занимает нелепое время.Мне действительно нужно ускорить этот запрос, он занимает более 7 часов.В таблице есть 2 миллиона строк, к которым она запрашивает - history_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 голосов
/ 22 сентября 2018

Для этого запроса:

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 независимо и посмотрите, поможет ли это.

...