MySql — left join больших таблиц

Доброго времени.

Есть таблица (порядка 10к записей) с объявлениями в ней есть ключевое поле id и несколько других полей. Нужно сделать возможность оставлять для каждого пользователя свои записи. Создал ещё одну таблицу с полями text, id_user и id_obj, 2 последних поля сделал ключевыми, так как к одному объявлению может быть несколько записей, так и у одного пользователя может быть записи к нескольким объявлениям. Запрос на вывод готовой таблицы выглядит примерно так:
SELECT * FROM `Table1` s LEFT JOIN (SELECT * FROM `Table2` WHERE `id_user`=7) t ON s.`id`=t.`id_obj`


Всё было хорошо до момента пока в таблице Table2 для user=7 было мало записей, запрос выполнялся в среднем 0,5 секунд. Но когда таблица разрослась до 7 тысяч записей, этот запрос стал выполнятся около 20 секунд, что совсем ненормально. Как быть в данной ситуации?
  • Вопрос задан
  • 3450 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Подзапрос зачем?
SELECT * FROM `Table1` s LEFT JOIN `Table2` t ON s.`id`=t.`id_obj` and `id_user`=7


И без вывода explain'а такие вопросы не задаются.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Медленно и вдумчиво прочитайте dev.mysql.com/doc/refman/5.0/en/optimization.html

И да, не видя план запроса сказать ничего нельзя.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы