2010-12-08 97 views
3

我需要一些幫助來優化查詢。我有一個查詢需要花費很長時間才能運行12s,如果我可以在優化它的時候獲得一些幫助,我會非常喜歡,因爲我不是sql專家。在這裏它是:優化內部聯接

SELECT ID           , 
     user_login         , 
     user_nicename        , 
     user_registered        , 
     user_status         , 
     display_name        , 
     t1.meta_value    AS account_type , 
     1 t2.meta_value   AS views   , 
     GROUP_CONCAT(t4.term_id) AS interests_skills, 
     GROUP_CONCAT(t4.taxonomy) AS taxonomyComb , 
     t4.term_id         , 
     t4.taxonomy 
FROM  wp_users 
     INNER JOIN wp_usermeta AS t1 
     ON  (
          t1.user_id = wp_users.ID 
        AND 
          (
            t1.meta_key = 'account_type' 
          AND  t1.meta_value = 'individual' 
          ) 
       ) 
     LEFT JOIN wp_usermeta AS t2 
     ON  (
          t2.user_id = wp_users.ID 
        AND  t2.meta_key = 'views' 
       ) 
     LEFT JOIN wp_term_relationships AS t3 
     ON  (
          t3.object_id = (1000000+wp_users.ID) 
       ) 
     INNER JOIN wp_term_taxonomy AS t4 
     ON  (
          (
            t3.term_taxonomy_id = t4.`term_taxonomy_id` 
          AND  t4.taxonomy   = 'category' 
          AND  t4.term_id IN (396,410,411,416,142,417) 
          ) 
        OR 
          (
            t3.term_taxonomy_id = t4.`term_taxonomy_id` 
          AND  t4.taxonomy   = 'skill' 
          AND  t4.term_id IN (461,463,464,466,490,468,470,491,473,474,475) 
          ) 
       ) 
WHERE t4.term_id IS NOT NULL 
GROUP BY ID LIMIT 0,10 

這裏是解釋

1 SIMPLE T4範圍PRIMARY,term_id_taxonomy,分類term_id_taxonomy 106 NULL 17使用其中;使用臨時;使用文件排序

1 SIMPLE T1 REF USER_ID,meta_key meta_key 768常量3773使用其中

1個SIMPLE wp_users eq_ref PRIMARY PRIMARY 8 jasper_gi.t1.user_id 1

1 SIMPLE T2 REF USER_ID,meta_key meta_key 768常量2

1 SIMPLE T3 eq_ref PRIMARY,term_taxonomy_id PRIMARY 16 FUNC,jasper_gi.t4.term_taxonomy_id 1使用其中;使用索引

+0

我修正了查詢格式。查看編輯歷史記錄,如果您沒有,我可能會無意中刪除了一個句子!請檢查並根據需要重新添加。 – 2010-12-08 14:16:14

回答

2

我喜歡你的SQL的佈局 - 非常容易閱讀。

每當我有一個問題是這樣我試圖打破它。與基表開始沒有所有的連接,看看它執行 - 看查詢計劃,驗證結果等

然後加在每一次加入一個,直到你看到的罪魁禍首。可能是少數幾個的混合體,可能是一些缺失的索引等。但通過系統地工作,通過這樣的連接,您可以找到問題點並更好地瞭解要做什麼。

+1

我使用http://www.sqlinform.com/online.phtml來批准OP的SQL! – 2010-12-08 14:17:36

1

攻擊的第一行是在指標:

t2/wp_usermeta: (user_id, meta_key) 
t3/wp_term_relationships: (objectid) 
t4/wp_term_taxonomy: (term_taxonomy_id, taxonomy, term_id) 

:你有複合索引定義?

0

有你的加入域的索引會有所幫助:

  • wp_usermeta.user_id
  • wp_users.ID
  • wp_term_relationships.objectid
  • wp_term_taxonomy.term_taxonomy_id
  • wp_term_taxonomy.taxonomy
  • wp_term_taxonomy.term_id