• お世話になります。
    現在、不動産サイトを制作しており、カスタムフィールド値で絞り込み検索機能を作成しています。

    一つの絞り込み条件の時は問題が無いのですが、複数の絞り込み条件を指定した際にmysqlのクエリが長時間残る問題が発生し、サーバ会社からサービス停止の連絡が来ており対処に困っております。

    サイドバーに
    「家賃」
    10万円以下
    10~12万円
    [–中略–]
    敷金なし

    「間取り」
    ワンルーム
    1K
    1DK
    [–中略–]
    4LDK
    5K以上
    等のチェックボックスを表示させて、チェックが入ったものをコンテンツの箇所に絞り込み表示させるようなイメージです。

    コードが長いので、「ペーストビン」にコードを投稿させていただきました。
    ■index.php(絞り込みの処理・記事の表示)
    http://pastebin.com/3zsAJfJS

    ■sidebar.php(絞り込み条件)
    http://pastebin.com/N0tDbbHN

    複数条件を指定してMysqlに負荷がかかっている状態のprocesslistは下記のようになっています。
    +———+——–+———–+—————-+———+——+———————-+——————————————————————————————————+
    | Id | User | Host | db | Command | Time | State | Info |
    +———+——–+———–+—————-+———+——+———————-+——————————————————————————————————+

    | 1204276 | msadmin | localhost | wp_takuto_test | Query | 17 | Copying to tmp table | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts |

    +———+——–+———–+—————-+———+——+———————-+——————————————————————————————————+

    投稿タイプは
    function.phpに記載し、

    カスタムフィールドは
    「Advanced Custom Fields」
    を使っています。

    タクソノミーは
    「Custom Post Type UI」
    を使っています。

    query_postsやmeta_queryの事について、色々なサイトを見ながら調べておりますが、原因と解決策が分からず困っております。

    何卒、よろしくお願いいたいします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • カスタムフィールドをがりがり使っているようですが、カスタムフィールドを多用するとどうしても負荷がかかりがちです。

    間取りなど、ある程度カテゴリー的にになるものは、カスタムタクソノミーを利用するとだいぶ違うと思います。

    トピック投稿者 yuuno729

    (@yuuno729)

    Toro_Unit様

    ご返答ありがとうございます。

    一度、カスタムフィールドを減らす方向でテストしてみます。

    ありがとうございます。

    トピック投稿者 yuuno729

    (@yuuno729)

    Toro_Unit様

    カスタムフィールドを減らしてテストを行ってみましたが、それほど負荷が下がりませんでした。
    query_postsを使っていることが原因でしょうか?
    もしくはサーバのスペックを上げるとある程度ましになるものでしょうか?

    何度も申し訳ございませんが、ご教示よろしくお願いします。

    query_posts は非推奨です。というかいろいろバグります。

    WordPress の クエリに干渉するのであれば、pre_get_posts アクションフックを使用すべきです。

    また、query_posts 自体は内部で使われている関数で、これを実行して、DBから投稿データを取得します。なので、テンプレート上で実行するとさらにもう一度クエリが回るので場合によっては速度面で悪影響が出るかと思います。

    また、どのクエリが原因なのか特定出来ないすし、そもそもWordPress自体が結構な数のクエリを投げたりしていますので、デバッグ環境で、

    define('SAVEQUERIES', true);

    を wp-config.phpで設定し、クエリの内容、実行時間などを計測すべきかと思います。Codexを参照してください。

    wp-config.php の編集 – WordPress Codex 日本語版

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタムフィールド絞り込み クエリが長時間残る」には新たに返信することはできません。