meta_queryを高速化するプラグイン作ってみました。
-
とある仕事でレコード数10万超え、postmetaレコード数1000万超えのサイトをつくることがあり、meta_queryが遅くて困ったので、必要に迫られてスピードアップのプラグイン作ってみました。
https://wordpress.org/plugins/meta-accelerator/
使い方はこちら
http://www.eyeta.jp/archives/1012不具合等ありましたらフィードバックくださると助かります。
-
大レコードのテストデータをすぐに用意できなかったのでインストールだけ試してみました。
create acceleratorボタンを押した結果のログ
PHP Warning: call_user_func_array() expects parameter 1 to be a valid callback, function ‘meta_accelerator_activate’ not found or invalid function name in /path/to/wordpress/wp-includes/plugin.php on line 470
PHP Warning: Invalid argument supplied for foreach() in /path/to/wordpress/wp-content/plugins/meta-accelerator/class/posttype.php on line 525ダイアログ
<br /> <b>Warning</b>: Invalid argument supplied for foreach() in <b>/path/to/wordpress/wp-content/plugins/meta-accelerator/class/posttype.php</b> on line <b>525</b><br /> {"rsl":true,"next":"none","target":"post"}
・カンマ区切りのデータを作る際に、meta_valueのカンマをエスケープしていないのが怖い(戻せる?)
・非公開のメタ情報(キーがアンダーバーで始まるもの)はインデックス用のテーブルに入れなくていいかも?似たようなプラグインがありますので、今後の開発の参考になるかもしれません
https://wordpress.org/plugins/horizontal-meta/ありがとうございます。該当箇所修正して、頂いたプラグイン参考に調べてアップデートします。
該当箇所洗ってみました。
Warningの箇所は対処したものを次のバージョンでアップします。
カンマ区切りの件は、このテーブルは検索利用だけで戻すことを考えていないので、問題ないかなと思っています。(meta_valueないのカンマをエスケープすると、検索の時にそれを意識しないといけなくなりますし)
非公開のメタ情報は悩んでいます。meta_query自体を置換してしまうので、非公開のメタ情報を含めて検索するケースもあるでしょうし、それを切り離して検索処理をどう考えるか。
オプションなどで、対象外にするという手はあるかもしれませんね。参考に頂いたプラグイン、解析進めてみます。
検索だけを考えるのであれば、カンマで区切らなくてもいいのではないか…と思います。私はconcrete5も専門にしているのですが、c5では似たような機能でコアで検索インデックス用のテーブルを持っていますが、改行2回区切りを採用しています。
ありがとうございます。
改行いいですね、変更してみます。
- トピック「meta_queryを高速化するプラグイン作ってみました。」には新たに返信することはできません。