質問: WordPressでupdate_user_metaを使っており、何人かのユーザーのデータが数十万文字と大きなサイズになっています。 (構造を見直すべきですが...、ひとまずこのままとしてご質問です。) 彼らを含むユーザー一覧を取得するnew WP_User_Query( $args )を使うと処理が遅くなるのですが、これはどう解決したらいいものでしょうか。 ちなみにこのときの取得は『ユーザー名だけ』でして、『数十万文字のカスタムフィールド』は取得しないのですが、なのになぜ遅くなるのでしょうか? 下記のように『$user->display_name』しか取得しておらず、カスタムフィールドは無関係なのに遅いのです。 理由と解決策についてお尋ねします。宜しくお願い致します。 ``` results ) ) { foreach ( $user_query->results as $user ) { echo '' . $user->display_name . ''; } } else { echo 'No users found.'; } ?> ```
回答: 再現できる情報がないので、ヒントだけ。 $args の中身によって、実行される SQL が変わるので実行時間も変化します。 まずは、Query Monitor プラグインを使って、どのようなクエリーが実行されているか確認してみてください。 Query Monitor の画面で、WordPress が実行する各クエリの実行時間が表示されていると思いますので、問題のクエリを確認して、そのクエリを MySQL 上で explain で SQL実行計画を取得してどの部分が遅いのかを確認してみてください。 $args の中身と SQL実行計画 をもとにチューニングすることになると思います。