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

は、ここで説明

1 SIMPLE T4使用範囲PRIMARY、term_id_taxonomy、分類term_id_taxonomy 106 NULL 17です。一時的な使用。

1 SIMPLE wp_users 8 jasper_gi.t1.user_id 1

1 SIMPLEのT2のREF USER_ID、meta_key meta_key 768 CONST PRIMARY PRIMARYのでeq_refどこ使用filesortレコードを使用して

1 SIMPLEのT1のREF USER_ID、meta_key meta_key 768 CONST 3773 2

1単純なt3 eq_ref PRIMARY、term_taxonomy_id PRIMARY 16 func、jasper_gi.t4.term_taxonomy_id 1 whereを使用する。インデックス

+0

私は、クエリの書式を修正しました。編集履歴を見ると、もしあなたがそうしなければ、誤って文を削除したかもしれません!必要に応じて確認して、もう一度追加してください。 –

答えて

2

を使用して、私はあなたのSQLのレイアウトが好き - 読みするのは非常に簡単。

私はそれを打破しようと、このような問題があるとき。すべての結合がない状態でベーステーブルを開始し、実行方法を確認します。クエリプランを確認し、結果を検証します。

次に、原因が分かるまで、各結合を1つずつ追加します。いくつかの混合物である場合があります、などいくつか欠落しているインデックス、かもしれません。しかし、体系、このように合流を通して働くことによって、あなたはトラブルスポットを見つけて、何をすべきかの良いアイデアを得ることができます。攻撃の

+1

私はhttp://www.sqlinform.com/online.phtmlを使ってOPのSQLを見た! –

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
関連する問題