Gerolian

Webサイト制作でのメモ等

[WP]WP_Queryでtaxonomy条件を複数かけたら劇遅になってしもうた

2014年12月5日

WordPressで検索をかけるときにWP_Queryを使うのが一般的だと思うけれど、AdvancedCustomFieldを使用したりなどしてカスタムフィールドを複数作ったりすると検索速度が劇遅になる現象に遭遇した

(taxonomyの名前とか値は適当に変えてます)

とにかく遅い

wp_queryで検索いけるやん! ってことで上みたいなコードをぶち込んで実行

mysqldの使用率が100%前後をうろうろして(ローカル)サーバが止まりました

この時WP_Queryで発行されていたSQL文の内容

JOINしすぎだろおおおおお

自分で書く

やりたいことは複数のtaxonomy値での検索になるのでWordpressのDB構造を見て自分で組んでいくことにする
JOINとかはかなりパワーを使うので副問い合わせを使ってみることに

さっきのWP_Queryだとサーバがストップしてたくらい劇遅だったけどこのコードだと【25.3ms】まで縮まった!
実際にはこれにエスケープ処理とかをかけるけど、速度的には使用に耐えられるレベルだと思う

組む上で困ったこと

wp_postmetaテーブルにtaxonomyの値が全て入っていて meta_key のvalueで切り替えられてるだけだったのでどうやってtaxonomyの名前と値でセット検索しようかと悩んだ。
結果としてtaxonomy検索の分だけ AND条件を噛ませた副問い合わせを行った。 ので実際の結合は2回になってるはず

感想

普通にWP_Queryで記事を出すとかならいいけれど少し複雑なことをやると結合の嵐でメチャクチャ遅くなるので、sqlが少しでも組めるなら自分で組んだ方が効率がかなりいいと思った。(mysqlできる人からみるとボロボロだろうけど…)



コメントはお気軽にどうぞ

メールアドレスは公開されません。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。