カスタムフィールドを使いやすくするプラグイン「カスタムフィールドテンプレート(Custom Field Template)」を長きにわたって便利に使ってきました。でもある日気がついた。データベースのpostmeta テーブルの肥大化の原因になっていることに。ちょっとダイエットしましょうかね、と。
データベース postmetaのダイエット
カスタムフィールドテンプレート(Custom Field Template)
プラグイン「カスタムフィールドテンプレート」は、カスタムフィールドの入力を手助けしてくれる定番プラグインです。
投稿で利用するカスタムフィールドをあらかじめ登録しておくだけで、ポスト編集時にすらすらとカスタムフィールドを入力できますね。配列での入力も簡単、チェックボックスやプルダウンによる入力もサポートしてます。それ以外にも、ショートコードを作成したりいろいろできますね。強力なプラグインで、これをずっと長い間使っています。
MovieBooという映画感想ブログでは、投稿に紐付ける情報がたくさんあって、タクソノミーやカスタムフィールドを多用しています。映画情報ですからスタッフ、キャストのクレジット分類、公式その他へのURLリンク、AmazonやiTues広告などです。一つのポストに多くののカスタムフィールド分類(meta_key)があります。
カスタムフィールドテンプレートのおかげで入力は比較的さくさくです。でも記事が増えてくるに従って、データベースのwp_postmetaが肥大していきます。
データベーステーブル postmeta 肥大化
データベースのテーブルを眺めていると、ふとpostmetaの容量が他と比べて大きいことに気づきまして、テーブル内のレコード数も桁違いに多いんですね。容量は10MiBほど、60000件ほどありました。これってなんでしょう。というかMiBって何ですか。MBとは別の単位?似たようなものですよね?
隠しカスタムフィールド
カスタムフィールドは自分が設定したもの以外にもwordpressのシステムが使用したり、いろんなプラグインが使用したりします。見えないようにmeta_keyがアンダースコア「_」で始まる名前になっていますね。
もう使っていないプラグインが残したmeta_keyがいくつか残っていました。全ポストにしっかり紐付けされていますから数も多いんです。ははあ、これは削除してしまって大丈夫なやつだなとわかります。
meta_key名を見ても「はて。これは何だろう」とさっぱりわからないものもあります。わからないものは怖いので触りません。
空のカスタムフィールド
カスタムフィールドは分類名が meta_key 、それに対する項目が meta_value ですね。
テーブルを眺めていると、keyもvalueもどっちも空の項目が見つかりました。投稿の編集時に作っては消し作っては消しした残骸でしょうね。しかも数が多い。容量的にはまったく問題にならないとは思いますが何となく今回「カスタムフィールドのテーブルをダイエットしたい」と思っていて、こういうのも塵山でしょうしね、削除しても問題ないでしょう。
meta_valueが空のカスタムフィールド
もうひとつ、ここからカスタムフィールドテンプレートとの絡みですが、 meta_key があって meta_value が空の大量の項目が確認出来ました。
カスタムフィールドテンプレートの設定で自分が用意したkeyです。key はたくさんありますが、そのうち必要なものだけ投稿編集時入力しています。ほとんどの項目は毎回必須というわけではないんですね。
で、これ、ご丁寧に value が空でもすべてpostmetaに追記作成される仕組みです。
なるほど考えてみれば当然の仕様ですわな。カスタムフィールドテンプレートで設定したカスタムフィールド項目は投稿編集時にすべて新規postmetaとしてデータが作成され、だからこそ入力が楽になります。その分、バリューが空の無駄なkeyもどんどん溜まっていきます。気がつけば数万行に及ぶ巨大postmetaテーブルとなりますな。
データベースの仕組みにとって、数万行程度のテーブルがパフォーマンスに影響を及ぼすかどうかは知りません。大したことないようにも思えます。でも今回はpostmetaテーブルのダイエットが目的ですから、とりあえずはガシガシ削除していきます。
postmetaの無駄なデータを削除
データベースを触るのは恐ろしいことですのでもちろんあらかじめバックアップを取ります。そして闇雲に消していきます。
まずは不要プラグインが作成した隠しカスタムフィールドですね。明確に出自がわかり、明確に不要だと判断出来るものだけを絞り込んで削除。さくっ。
次にkeyもvalueも空の全く無用のカスタムフィールドを絞り込んで削除。さくっ。
そしてカスタムフィールドテンプレートが作成したvalueが空の無用カスタムフィールドを絞り込んで削除。さくっ。
ということで少しダイエットできました。1万行程度のダイエットとなりましたが気持ちいいのでこれで良しとします。
というわけでこのポストは終わりですが、ちょっとオマケを。
データベースの操作
ところで、myadminにログインしてのデータベース操作ですが、慣れた詳しい人にとってはさほど難しいことではありません。ですが慣れてなくて詳しくない人にとってはとても難しい操作となります。絞り込みにしたって、正規表現もわからないし検索自体まともにできない人もいます。私がそうです。php myadminにログインしていろいろ触ってても、ほとんど何のことやらわかっていないんです。あの画面自体が恐怖なんです。なのになぜ今回様々な絞り込みや操作が出来たのか。それには秘密があります。
WordPressをFileMakerで操作する
という、一言で説明しにくいですが、ど素人がwordpressでややこしいことをしたいと身の程をわきまえぬことを思ってですね、にもかかわらずデータベースの勉強をせず、楽な方法ないかと右往左往して、昔からあるデータベースソフトのファイルメーカーProと連携させることにしたんですよ。今回のテーブル内データの絞り込みや削除もローカルのファイルメーカーからさくさくっとできました。
予告
データベースの使い方を学ぶことを避けて余計ややこしいファイルメーカーとの連携に労力を費やす、これが本末転倒の醍醐味。
WordPressとファイルメーカーとの連携について自分の記録のためにもこのブログに投稿しておこうと思ってるんですが、順序だてて記事書くのも面倒なのでやるかどうかはわかりません。そんな記事に需要があるとも思いにくいし。でも今回のこのポストはその一環と言えるかもしれないのでここに記しておきました。興味ある人います?
[追記] 続きをアップしました。次の記事はWordPress CSVエクスポートインポート、そしてデータベース構造です。
[追記2] 結局たくさんの関連記事を書きましたのでまとめてシリーズとして分類し特集記事のページにメニューみたいに並べました。
特集シリーズ記事:FileMakerでWordpress です。この大枠はさらに小分類もされています。
興味があります!よろお願いします。
すまいるさん表明ありがとうございます。がんばってみます。