@stsashko_user

Как увеличить производительность в работе с MySQL?

Помогите пожалуйста решить проблему.
Есть две таблицы в базе данных leads (заявки) и lead_phones (телефоны заявкам)
Таблица leads имеет 123373 записей а таблица lead_phones 493492
40fafe3762a242ad902b33fc3104bc78.jpg
Когда делаешь элементарный sql запрос
SELECT ld.lead_id, ph.phone
     FROM leads as ld
          LEFT JOIN lead_phones as ph ON ph.lead_id = ld.lead_id
                GROUP BY ph.lead_id
                    LIMIT 40

То продолжительность выполнения того запроса составляет 4,384 секунд

И это очень долго. Потому что в проекте есть и более сложные запросы с присоединением через JOIN больше таблиц. Некоторые запросы просто перезагружают сервер. И сервер виснет. Кроме того, в таблице leads (заявки) сейчас всего 123000 а может быть и полмиллиона.
Что мне нужно сделать, чтобы ускорить выполнение запросов? Индексацию по полям ID делал. Может я делал что-то неправильно ... Подскажите пожалуйста что можно сделать? Мне помогут любые советы.
Спасибо
  • Вопрос задан
  • 2440 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Nc_Soft
Все эти данные есть в таблице lead_phones, я вообще не понимаю зачем тут join
upd короче я так понял что ты гланды через попу удаляешь, вот это будет нормально работать если есть индекс на ph.lead_id
SELECT *
FROM lead_phones as ph
  LEFT JOIN leads as ld ON ph.lead_id = ld.lead_id
GROUP BY ph.lead_id
LIMIT 40
Ответ написан
@IceJOKER
Web/Android developer
**текст изменен**
А индексы можно увидеть?
Ответ написан
mgyk
@mgyk
1) Проверьте engine в табличках -> InnoDB
2) Покажите настройки из my.cnf.
3) Посмотрите в process list нет ли пачки запросов висящих одновременно к таблице.
4) Покажите show create tabal XXX; для обоих таблиц и EXPLAIN этого запроса
На таких размерах все индексы должны помещаться в память и проблем быть не должно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы