2012-03-27 19 views
1

私は、多くの左ジョインと日付を伴う内部ジョインを持つこのクエリを持っています。 id_art(articles_artから)とdate_dat(dates_dat)でグループ化する必要があります。問題はそれが本当に遅いことです。 1000レコードは3秒かかります。 dates_datはdates_datテーブルで索引付けされ、id_artはarticles_artの主キーです。 このクエリを最適化するにはどうすればよいですか?mysql:joinで高速グループ化

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 
+3

説明プランを掲載できますか? – ruakh

+0

索引は、選択された照会のパフォーマンスの鍵です。照会からの説明を追加することで、索引の欠落箇所を特定するのに役立ちます。 – ManseUK

+0

クエリーの説明がどのように役立つべきか?私はpossible_keys、key、ref、rows、extraを見ていますが、これがどのように役立つのかわかりません。説明して頂けますか?ありがとう – Pietro

答えて

1

あなたがこれらの列に

prd.id_prd 
validated_art 
text.idlin_int 

これはデータレイテンシISN場合はON句

0

カラム条件にインデックスを置く動作しない場合は、その後のテスト、これは最初のインデックスを置くことができるようになります問題は、あなたは1つの正規化されたテーブルに(おそらく夜間?)データをハイブすることができますか?そのようにして、すべてのJOINSがなくても単一のテーブルにクエリを実行できます。さらにスピードアップに役立つインデックスを適用することもできます。

+0

ジョインだけで7-10msかかるので、ジョインは問題ではありません。問題は、by group byです。 – Pietro

+0

ああ、OK。待ち時間が問題ではないと仮定すると、GROUP BYデータを一晩正規化できますか? – Phil