サポート » その他 » WP_Queryでカスタムフィールドの複雑な条件検索をした際に、早く表示する方法が知りたいです

  • 解決済 kabachanta

    (@kabachanta)


    WP_Queryでカスタムフィールドの少し複雑な条件で絞り込んだ条件で投稿を取得したいです。

    詳細は下に記載しているのですが、
    もしも「keyA」の値が「AAA」のときは「keyB」は「BBBBBBB」の投稿を、
    もしも「keyA」の値が「AAA」じゃないときは「keyB」は「CCCCCCCC」投稿を、
    それぞれ取得したいと思っています。

    
    // 該当の条件の時
            if($searchVal['validation'] === 'gaitou') {
                $args['meta_query'][] = array(
                    'relation' => 'OR',
                    array(
                        array(
                            'key' => 'keyA',
                            'value' => 'AAAAA'
                        ),
                        array(
                            'key' => 'KeyB',
                            'value' => 'BBBBBBB'
                        )
                    ),
                    array(
                        array(
                            'key' => 'keyA',
                            'value' => 'AAAAA',
                            'compare' => '!='
                        ),
                        array(
                            'key' => 'KeyB',
                            'value' => 'CCCCCCC'
                        )
                    ),
                );
            }
    

    OR検索をしている2つのうち1個ずつ検索をした場合にはすぐに検索結果が得られるのですが、
    2個をOR検索した際にものすごく表示に時間がかかってしまいます…

    フォームのチェックされた値によって検索条件が変動します。
    そのうち上記のように重たい処理をする必要がある条件が2つあるので、
    高速化できるようにしたいです。

    お手数ですが、ご確認のほどよろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • munyagu

    (@munyagu)

    こんにちは

    確かにORでは遅くなりがちですが、どちらかというと!=ではインデックスが効かないので遅いのではないでしょうか。
    keyAの値のパターンが少ないのであれば、全て記述した方が速いと思います。

    それでも遅い場合、対策は

    1.wpdbクラスを使って、ご自身でパフォーマンスの良いSQLを書く 
    関数リファレンス/wpdb Class
     条件を絞ってからORを使う、ORじゃなくてUNIONを使う、などOR条件のSQLパフォーマンスについて検索すればTipsがいろいろあると思います。
    2.データベースが高速なサーバーに乗り換える

    といった感じでしょうか。
    役に立たなかったらすいません。

    トピック投稿者 kabachanta

    (@kabachanta)

    munyaguさん。

    ありがとうございます!

    keyAの値のパターンが少ないのであれば、全て記述した方が速いと思います。
    こちらの発言をヒントに、なるべく検索条件を短くすることで、
    1分以上かかっていた時間を5秒くらいに縮めることができました。

    > 1.wpdbクラスを使って、ご自身でパフォーマンスの良いSQLを書く
    この方法を実装したいのですが、いまいちよくわかっておりません…
    勉強しておきます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「WP_Queryでカスタムフィールドの複雑な条件検索をした際に、早く表示する方法が知りたいです」には新たに返信することはできません。