2010-12-08 5 views
3

쿼리 최적화에 도움이 필요합니다. 12 초를 실행하는 데 너무 오래 걸리는 쿼리가 있는데 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 

를 Where 사용

1 SIMPLE T4 범위 PRIMARY, term_id_taxonomy, 분류법 term_id_taxonomy NULL 106 17를 설명한다; 임시 사용; filesort

1 SIMPLE T1의 심판 USER_ID, meta_key meta_key

1 SIMPLE wp_users는 PRIMARY PRIMARY 8 jasper_gi.t1.user_id 1

1 SIMPLE T2의 심판 USER_ID를 eq_ref하여 768 CONST 3773, meta_key의 meta_key 768 CONST 사용 2

1 간단 함 t3 eq_ref PRIMARY, term_taxonomy_id PRIMARY 16 func, jasper_gi.t4.term_taxonomy_id 1 where를 사용합니다. 색인 사용

+0

쿼리 형식이 수정되었습니다. 편집 기록을 보면 내가 실수로 문장을 삭제했을 수도 있습니다! 필요하면 확인하고 다시 추가하십시오. –

답변

2

나는 당신의 SQL의 레이아웃을 좋아한다 - 읽기가 매우 쉽다.

이런 문제가 발생할 때마다 문제를 해결하려고합니다. 모든 조인을하지 않고 기본 테이블에서 시작하여 수행 방법을 확인하십시오. 쿼리 계획을보고 결과를 확인하십시오.

그런 다음 범인이 나타날 때까지 각 조인을 한 번에 하나씩 추가하십시오. 몇 가지가 섞여 있거나 누락 된 색인이 될 수 있습니다. 그러나 이와 같은 조인을 통해 체계적으로 작업하면 문제가있는 부분을 찾아서 무엇을해야하는지 더 잘 알 수 있습니다. 공격의

+1

http://www.sqlinform.com/online.phtml을 사용하여 OP의 SQL을 prettified했습니다! –

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_term_taxonomy.term_taxonomy_id wp_term_relationships.objectid wp_users.ID wp_usermeta.user_id
  • wp_term_taxonomy.taxonomy
  • wp_term_taxonomy.term_id