Помогите ускорить выборку из базы Mysql При выборке 10 записей уходит 2.5 секунды!
SELECT fr.*, fr.status AS fstatus, us.*, bk.*, od.*, ev.eventName, ev.date AS evDate, ev.homeTeam, ev.awayTeam, ev.eventId AS eventId, ev.href AS eventHref, sp.name AS sportName,
lg.leagueId, lg.name AS lgName, cn.name AS cnName, sp.name AS spName FROM forecast fr
JOIN user us ON
us.userId = fr.userId AND (SELECT SUM(profit) as profit FROM `forecast` WHERE userId = us.userId AND status IS NOT NULL AND profit IS NOT NULL ) > -100000
JOIN bookmaker bk ON
bk.bookmakerId = fr.bid
JOIN odds od ON
fr.oddsId = od.oddsId
JOIN event ev ON
od.eventId = ev.eventId
JOIN league lg ON
lg.leagueId = ev.leagueId
JOIN country cn ON
lg.countryId = cn.countryId
JOIN sport sp ON
lg.sportId = sp.sportId
WHERE ev.date > 0 AND fr.forecast IS NOT NULL GROUP BY fr.forecastId ORDER BY fr.date DESC LIMIT 0, 10
Возможно его както сгруппировать?
Без EXPLAIN и схемы таблиц трудно оценить сложность запроса. Обязательно прикладывайте результат EXPLAIN EXTEND и схему! А с ходу могу посоветовать сначал выбрать userId:
SELECT userId FROM `forecast`
WHERE status IS NOT NULL AND profit IS NOT NULL
GROUP BY userId
HAVING SUM(profit) > -100000;
Потом уже:
SELECT fr.*, fr.status AS fstatus, us.*, bk.*, od.*, ev.eventName, ev.date AS evDate, ev.homeTeam, ev.awayTeam, ev.eventId AS eventId, ev.href AS eventHref, sp.name AS sportName, lg.leagueId, lg.name AS lgName, cn.name AS cnName, sp.name AS spName
FROM forecast fr
JOIN user us ON
us.userId = fr.userId
JOIN bookmaker bk ON
bk.bookmakerId = fr.bid
JOIN odds od ON
fr.oddsId = od.oddsId
JOIN event ev ON
od.eventId = ev.eventId
JOIN league lg ON
lg.leagueId = ev.leagueId
JOIN country cn ON
lg.countryId = cn.countryId
JOIN sport sp ON
lg.sportId = sp.sportId
WHERE userId IN (???????) ev.date > 0 AND fr.forecast IS NOT NULL
GROUP BY fr.forecastId
ORDER BY fr.date DESC LIMIT 0, 10;
Можно даже подзапрос сунуть в (???????) - но не рекомендую. Ну и естественно обязательно чтоб был индекс на userId, ну а далее можно оптимизировать с помощью составных индексов
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добавил в строковые ресурсы новый язык, но при входе в приложение с другим установленным языком, строки не переводятсяВидимо я чего то не доделываю?...
Пытаюсь выполнить JavaScript код в TChromium, но получаю ошибку: