Как оптимизировать запрос?

Есть таблица messages clip2net.com/s/3mWnxFC 2кк запией (1.1гб)
И таблица user_profile clip2net.com/s/3mWnRaW 10к записей (1.5мб)
И 2 запроса.
первый ждал 5 минут, так и не дождался
второй отработал за 2 минуты примерно
можно их как то оптимизировать? или это задача не для mysql? (в sql noob)
// получить список диалогов (где ?i - это id текущего залогиненного юзера)
            SELECT * FROM
            (
                SELECT t.*, c.user_profile_id, c.user_profile_avatar,  c.user_profile_realname
                FROM " . $this->table . " t
                JOIN dev_users_profile c
                    ON t.message_target = c.user_profile_id
                    OR t.message_author = c.user_profile_id
                WHERE (t.message_author=?i AND c.user_profile_id!=?i)
                OR (t.message_target=?i AND c.user_profile_id!=?i)
                    ORDER BY t.message_date DESC
            ) AS temp
                    GROUP BY user_profile_id
                    ORDER BY message_date DESC

// получить список сообщений с определенным юзером

SELECT * FROM dev_messages t
JOIN dev_users_profile c
ON t.message_author = c.user_profile_id
 WHERE (t.message_author =949 AND t.message_target=1)
OR (t.message_author =1 AND t.message_target=949)
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
Сделайте EXPLAIN для обоих запросов - увидите, используются ли индексы.
2 млп записей - не очень много. Скорее всего просто ищите по FullScan.

как минимум напрашиваются индексы по
для dev_messages - по message_author, message_target, message_date
для dev_users_profile - по user_profile_id
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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