0

私はWordpressとMySQLで作業しており、次のクエリがあります

SELECT COUNT(p.ID)
FROM wp_posts AS p
    LEFT JOIN wp_postmeta AS t1
       ON t1.post_id = p.ID
         AND t1.meta_key = 'followers_count' 
    LEFT JOIN
       (SELECT tt.term_id,tr.object_id
        FROM wp_term_relationships AS tr
          INNER JOIN wp_term_taxonomy AS tt
             ON tt.term_taxonomy_id = tr.term_taxonomy_id
               AND tt.taxonomy='paises'
       ) as terms
         ON p.ID=terms.object_id 
    INNER JOIN
        (SELECT meta_value,tt.term_id
         FROM wp_postmeta AS t1 
          LEFT OUTER JOIN wp_term_relationships AS tr
             ON t1.post_id=tr.object_id
          INNER JOIN wp_term_taxonomy AS tt
             ON tt.term_taxonomy_id = tr.term_taxonomy_id
               AND tt.taxonomy='paises'
         WHERE t1.post_id = 80
            AND t1.meta_key = 'followers_count'
       ) AS f
          ON p.post_type='post'
             AND p.post_status='publish'
             AND t1.meta_value>f.meta_value
             AND terms.term_id=f.term_id

基本的にここで行っているのは、term テーブルから投稿国を取得し、wp_postmeta テーブルから follower_count を取得することです。したがって、4 つの結合テーブルがあります。

そして、最後のサブクエリである followers_count を使用して、指定された国でのその投稿のランクを取得したいと考えています。

現在は機能していますが、対応する国とフォロワーを含むすべての投稿を選択しているため、改善できると思います。次に、同じテーブルをクエリして、選択した投稿から国とフォロワーの数を取得します (この例では 80)ケース) したがって、最初のクエリをその国のみに制限します。

一時テーブルを試しましたが、同じクエリで複数回使用することはできず、CTE は MySQL に存在しないため、これを行いました。

これを改善する方法、またはクエリを少し縮小する方法はありますか?パフォーマンスよりももう少し学びたいです。

4

1 に答える 1

0

学習したばかりの場合は、すべてのサブ選択を結合に変えることから始めます。「Explain extended」の出力を見て、オプティマイザがこのクエリで何をするかを確認してから、一連の結合として繰り返します。通常、サブセレクトを使用しない方が処理が速く簡単です。

いくつかの参考文献:

ここ
ここ

注 - これは 100% のルールではありません。マイレージは異なる場合があります。

于 2012-12-27T14:55:41.880 に答える