2010-12-08 62 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