mysql: быстрая группировка с помощью join - PullRequest
1 голос
/ 27 марта 2012

У меня есть этот запрос со многими левыми соединениями и внутренним соединением с датами. Мне нужно сгруппировать по id_art (из article_art) и date_dat (date_dat). Проблема в том, что это действительно медленно. для 1000 записей требуется 3 секунды. date_dat индексируется в таблице date_dat, а id_art является первичным ключом article_art. Что я могу сделать, чтобы оптимизировать этот запрос?

SELECT
    id_art, image2_art, video_art, website,
    text.title_int, text.intro_int, text.text_int, text.extra_int,
    dat.date_dat, dat.date2_dat,
    group_concat(tim.time_tim),
    prd.name_prd,
    group_concat(cat.name_cat),
    trg.name_trg,
    spa.name_spa,
    spa2.name_spa 
FROM
    articles_art AS art
    LEFT JOIN internText_int AS text ON text.idart_int = art.id_art
    INNER JOIN dates_dat AS dat ON art.id_art = dat.idart_dat
    LEFT JOIN spaces_spa As spa ON spa.id_spa = dat.idspa_dat
    LEFT JOIN spaces_spa As spa2 ON spa.id_spa = dat.idspa2_dat
    LEFT JOIN times_tim AS tim ON tim.iddat_tim = dat.id_dat
    LEFT JOIN articles_products_artprd AS artprd ON artprd.idart_artprd = art.id_art
    LEFT JOIN products_prd AS prd ON prd.id_prd = artprd.idprd_artprd
    LEFT JOIN cater_cev AS cev ON cev.idart_cev = dat.idart_dat
    LEFT JOIN categories_cat AS cat ON cat.id_cat = cev.idcat_cev
    LEFT JOIN targets_trg AS trg ON trg.id_trg = art.idtrg_art   
WHERE
    prd.id_prd in (1,2)
    AND validated_art = 1
    AND text.idlin_int in (1,4)
GROUP BY
    id_art, date_dat

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Похоже, вы можете поместить индекс в эти столбцы

prd.id_prd
validated_art 
text.idlin_int

Сначала проверьте это, затем, если это не работает, поместите индексы в условия столбца в предложении ON

0 голосов
/ 27 марта 2012

Если задержка данных не является проблемой, можете ли вы объединить данные (возможно, в одночасье?) В одну нормализованную таблицу? Таким образом, вы запрашиваете одну таблицу без всех этих соединений. Вы даже можете применять индексы, чтобы ускорить процесс.

...