WordPressのデータベースが重い理由と、実装型の軽量化テクニック|現場で使える実践テクニック
こんにちは!
今日は「WordPressのデータベース最適化で表示速度を劇的に改善する方法」について、現場で実際に使ってるテクニックをお話しします。
これね、めっちゃ大事な話やねん。
多くの人がキャッシュプラグインだけに頼ってるけど、実はデータベースの中身がゴチャゴチャになってることが原因で遅くなってることがほんまに多いんですよ。
データベースが重くなる本当の理由
僕も最初は「WordPress遅い=キャッシュが足りない」って単純に考えてたんです。
でも現場でいろいろなサイトを見てると、実はデータベースの中身が信じられないくらい膨張してることに気づいたんですよ。
具体的には、こんなデータが溜まってます:
- 記事の過去バージョン(リビジョン)が何十個も保存されている
- 削除したはずのプラグインの設定データが残っている
- 有効期限切れの一時データ(トランジェント)がずっと放置されている
- スパムコメントの痕跡がテーブルに残ってる
これらが積み重なると、データベースのテーブルがメガバイト単位で膨張して、クエリの実行が遅くなっちゃうんです。
キャッシュで何とかなってる部分もありますけど、根本原因を放置してるようなもんなんですよ。
リビジョンと下書きの大掃除
では実装型の対策をお話しします。
まず最初にやるべきは「リビジョン」の整理です。
WordPressは記事を編集するたびに自動保存してくれるんですけど、これが実は便利な反面、データベースを圧迫する大きな原因なんですよ。
1000記事あるサイトで、1記事につき20個のリビジョンがあったら…計20,000レコードですよ。ほんま怖いやん。
対策は2つあります。
方法1:wp-config.phpで制限する
wp-config.phpファイルに以下を追加することで、今後のリビジョン数を制限できます:
define( 'WP_POST_REVISIONS', 3 );
この設定で、各記事は最新版を含めて3世代まで保存するようになります。
方法2:既に溜まったリビジョンを削除する
過去のリビジョンを削除するには、phpmyadminやWP-CLIを使います。
WP-CLIが使える環境ならこのコマンドがめっちゃ便利です:
wp post delete --post_type=revision --force
これで一気に削除できます。
トランジェント(一時データ)の削除
次に重要なのが「トランジェント」の削除です。
これね、プラグインがキャッシュ代わりに保存する一時データなんですけど、有効期限を過ぎても削除されず放置されることがあるんですよ。
特にプラグインを削除したあとは、そのプラグインが作ったトランジェントがずっと残ったままになります。
僕が見た案件では、有効期限切れのトランジェントが5000個以上溜まってました。これぞ現場あるあるですね。
WP-CLIなら一度のコマンドで全削除できます:
wp transient delete-all
または、特定のプラグイン関連のトランジェントだけ削除する場合は:
wp transient list | grep プラグイン名
で確認してから削除するといいですよ。
実装型の自動クリーンアップ仕組み
ここからが僕が実装してる工夫なんですけど、一度キレイにしたら「また溜まるの?」ってなりますよね。
そこで自動化の仕組みを入れてます。
functions.phpで定期的な自動削除
テーマのfunctions.phpに以下を追加すると、毎日リビジョンを自動削除できます:
add_action( 'wp_scheduled_delete', function() { wp_delete_post_revisions( 0, true ); } );
この設定により、WordPressの標準機能でスケジュール実行される削除タスクと連動して、古いリビジョンを勝手に削除してくれます。
プラグインで一元管理する
ただ「functions.phpに書くのは不安」という場合は、Advanced Database CleanerやWP-Optimizeといったプラグインを使うのもいいですよ。
こういったプラグインは定期実行の設定が簡単で、有効期限切れのトランジェントも自動削除してくれます。
重要な注意点として、本番環境でいきなり実行する前に、必ずバックアップを取ってから実装するようにしてくださいね。
特にWP-CLIのコマンドは取り消せませんから。
まとめ
WordPressの表示速度が遅い場合、キャッシュを増やすだけじゃなく、データベースの中身を見ることがめっちゃ大事です。
リビジョン、トランジェント、削除済みプラグインのデータ…こういった「不要なデータ」を整理することで、初期状態では劇的に改善されることがほとんどですよ。
さらにwp-config.phpの設定と自動クリーンアップの仕組みを組み合わせることで、長期的にパフォーマンスを保つことができます。
現場では「10秒以上かかってた管理画面が2秒になった」なんて事例もありますからね。
まずはバックアップを取ったうえで、リビジョン削除からチャレンジしてみてください。
効果を実感しやすいはずですよ。
Web制作で困ったことがあったら、またこのブログを覗いてくださいね!
― クリオ