Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Запрос такого вида:
SELECT s.price,s.image,h.name,h.brand FROM t1 s LEFT JOIN t2 h ON (h.id=s.iditem) WHERE s.val=1 GROUP BY s.iditem ORDER BY s.iditem ASC LIMIT 30
В таблице t1 значение iditem повторяется множество раз.
Проблема в следующем, в таблице стало много записей и из за GROUP BY время запроса сталo очень большим.
Базе приходится сначала сгруппировать все значение iditem в t1 для того чтоб получить 30 уникальных.
Как изменить запрос, чтобы уменьшить нагрузку на БД и ускорить время обработки?
Отредактированно Виталий_39 (05.05.2011 18:56:51)
Неактивен
А ключики t1(val, iditem) и t2(id) есть?
Кстати, ORDER BY можно такой не писать — группировка всегда подразуме-
вает неявную сортировку по своим столбцам.
Неактивен
val только в t1(условие может изменятся например по val=2), ключи в t1(iditem) соответствуют t2(id).
В таблице t2 только одна строка совпадающая по ключу.
Если группирую только t1 без LEFT JOIN всё ок, стоит только присоединить таблицу t2 время запроса в 8 раз увеличивается.
Решение кроме как объединение таблиц пока не пришло в голову.
Отредактированно Виталий_39 (07.05.2011 09:06:30)
Неактивен
Я так и не понял, есть ли индексы, которые я написал
и EXPLAIN от запроса покажите, пожалуйста.
Неактивен
Страниц: 1