0

私はWordpressDBから顧客向けのモバイルアプリへのデータの抽出と表示に取り組んでいますが、このクエリを最も効率的にするために少し問題があります。

WordPressには、アクセスする必要のあるデータをリンクする3つのテーブルがあります。1。wp_posts-このテーブルには、メインの投稿タイトル、公開ステータス、投稿タイプがあります。2. wp_postmeta-このテーブルには、上記のテーブルの投稿IDに関連するすべての補足情報が含まれています。3. wp_p2p-このテーブルには、すべての親子投稿とそれらの関係へのリンクがあります。

これらのテーブルには大量のデータがあるため、現在実行しているクエリの実行には約13秒かかります。このsqlfiddleを見て、改善するために何を確認できるか教えてください。現在の形式のクエリは最終結果ではありませんが、それを改善すると最終結果が改善されます。また、wp_postmetaテーブルの「名前」に検索フィールドを追加する必要があります。

http://sqlfiddle.com/#!2/0e9e0/1

どんな方向でもよろしくお願いします!

4

2 に答える 2

1

私の理解が正しければ、子投稿のみを探していることになります。その場合、以下のクエリははるかに高速になるはずです。

SELECT wp_posts.id,  post_title, post_status, post_type
FROM wp_posts
JOIN wp_postmeta ON (wp_posts.id = wp_postmeta.post_id)
LEFT JOIN wp_p2p ON (wp_posts.id = wp_p2p.p2p_from)
WHERE `post_status`='publish' AND `post_type`='merchant' 
AND wp_p2p.p2p_from IS NULL
GROUP BY wp_posts.id

このクエリは、p2p テーブルに一致するものが存在しない場所を見つけるように最適化されるため、その部分は現在実行している方法よりもはるかに高速になります。JOINonwp_postmetaは全く使わないので外すこともできるようです。それを削除するJOINGROUP BY冗長になり、削除するとパフォーマンスが少し向上する可能性があります。GROUP BY句に含まれていない非集計フィールドを厳密に選択することはできないため、を削除することもお勧めしますGROUP BYが、MySQL はこの機能を提供するため、クエリはどちらの方法でも機能します。

于 2013-02-12T20:00:00.137 に答える
0

まず、INNER または OUTER JOIN 構文を使用してテーブルを結合する必要があります。そう:

FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.id = wp_postmeta.post_id

または、ここで OUTER JOIN が必要ですか?

wp_posts.id で GROUP BY を実行している理由を説明できますか。この列には一意の値がありませんか?

于 2013-02-12T18:49:10.947 に答える