Запрос на обновление с подзапросом select выполняется очень медленно в MySQL 5.7, но работает очень быстро в 5.5 - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть цифровой тестовый сервер Ocean, который имеет Ubuntu 14.04 и MySQL версии 5.5.С другой стороны, мой рабочий сервер - Ubuntu 16.04, а версия mysql - 5.7.У меня есть этот запрос на обновление

UPDATE paid_cricduel.fantasy_teams t 
join (select ft.fantasy_team_id, 
             ft.team_captain_id, 
             sum((case 
               when ft.team_captain_id = ccp.cricket_contest_player_id then 2
               when ft.team_vc_id = ccp.cricket_contest_player_id then 1.5
               else 1
             end) *  ccp.player_points) as temp_total 
from fantasy_teams as ft 
join fantasy_team_players ftp on ft.fantasy_team_id=ftp.fantasy_team_id
join cricket_contest_players as ccp on   ftp.cricket_contest_player_id = ccp.cricket_contest_player_id 
where ft.cricket_contest_id=? 
group by ft.fantasy_team_id) temp 
set total_points = temp.temp_total
where temp.fantasy_team_id = t.fantasy_team_id

Этот запрос выполняется на моем тестовом сервере за 0,3 секунды, но в моей работе занимает не менее 25 секунд.Иногда даже 50+ секунд.Я пробовал разные решения, упомянутые в отношении переполнения стека, но мне кажется, что ничего не работает.

Вопрос заключается в том, что он берет очки игрока из другого стола и затем выбирает игроков вашей команды из другого стола.Делает суммирование всех очков ваших игроков.Кроме того, если игрок является капитаном вашей команды, он умножает очки этого игрока на 1,5, если он вице-капитан, то на 1,2, в противном случае просто добавляет их как есть.

У меня есть индексы в столбце total_points иfantasy_team_id, но я удалил их, чтобы посмотреть, окажет ли это какое-либо влияние, но это не помогло.

Любая помощь?

...