Оптимизация запроса возможна?

Статус
В этой теме нельзя размещать новые ответы.

@lex

Постоялец
Регистрация
13 Июн 2006
Сообщения
50
Реакции
3
Возможно ли оптимизировать запрос:
Код:
SELECT
    companies.id as id,
    companies.`name` as name,
    GROUP_CONCAT(DISTINCT categories.`name` ORDER BY city.`name` ASC) as categories,
    GROUP_CONCAT(DISTINCT city.`name` ORDER BY FIELD(city.`id`, 3, 2, 1) DESC, city.`name` ASC) as cities
FROM
    companies,//10000 записей
    categories, //20 записей
    city,//20000 записей
    companytocities,//60000 записей
    companytocategories//30000 записей
WHERE
    companies.id=companytocities.id
AND
    companytocities.city_id=city.id
AND
    company2categories.id=companies.id
AND
    categories.id=companytocategories.category_id
GROUP BY
    companies.id
ORDER BY
    companies.date
DESC;
Время выполнения ~3 секунды
Индексы на своих местах.
 
на вскидку - можно поиграться с цепочкой
WHERE
companies.id=companytocities.id
AND
companytocities.city_id=city.id
AND
company2categories.id=companies.id
AND
categories.id=companytocategories.category_id

в ней от перемены местами условий может измениться общее количество цепочек и соответственно время запроса. Хотя здесь только объединение...
Или поэкспериментируйте с разнами JOIN
 
не знаю. может этот вариант в данном случае не подходит но можно создать дополнительные поля с хешами значений которые являются строковыми.

Добавлено через 53 секунды
и перед запросом создавать хеш нужного значения
 
Запрос существенно(0,3 сек) ускорился и стал таким:
PHP:
SELECT
    companies.id as id,
    companies.`name` as name,
    companies.adding_date as date,
    GROUP_CONCAT(DISTINCT companies_categories.`name` ORDER BY companies_categories.`name` ASC) as categories,
    GROUP_CONCAT(DISTINCT city.`name` ORDER BY FIELD(city.`id`, 1, 2, 3) DESC, city.`name` ASC) as cities
FROM
    (SELECT companies.id as id, companies.name as name, companies.adding_date FROM companies ORDER BY companies.adding_date DESC LIMIT 0,10) companies,
    companies_categories,
    city,
    companies_company2cities,
    companies_company2categories
WHERE
    companies.id=companies_company2cities.id
AND
    companies_company2cities.city_id=city.id
AND
    companies_company2categories.id=companies.id
AND
    companies_categories.id=companies_company2categories.category_id
GROUP BY
    companies.id
ORDER BY
    companies.adding_date DESC
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху