コンテンツへスキップ
WordPressデータベース最適化:データベースのクリーンアップと高速化の方法

WordPressデータベース最適化:データベースのクリーンアップと高速化の方法

Erik KellerErik Keller更新日: 15 分で読めます483 閲覧

WordPressの各ページの読み込み、フォームの送信、プラグインの操作、ユーザーセッションはすべてデータベースクエリを含みます。時間が経つにつれて、データベースにはオーバーヘッドが蓄積されます:古い投稿のリビジョン、期限切れのトランジェント、孤立したメタデータ、スパムコメント、無効化されたプラグインからの未使用のテーブルなどです。この膨張はクエリを遅くし、バックアップサイズを増加させ、全体的なサイトのパフォーマンスを低下させます。このガイドでは、データベースの膨張を特定し、安全にクリーンアップし、再発を防ぐ方法について説明します。

WordPressがデータベースに保存するもの

データベースに何が保存されているかを理解することで、安全に削除できるものを特定できます。標準のWordPressインストールは12のコアテーブルを使用し、プラグインは必要に応じて独自のテーブルを追加します。

テーブル 保存内容 一般的な膨張の原因
wp_posts 投稿、ページ、リビジョン、添付ファイル、カスタム投稿タイプ 投稿のリビジョン、自動ドラフト
wp_postmeta 投稿のメタデータ(カスタムフィールド、プラグインデータ) 削除された投稿からの孤立したメタデータ
wp_options サイト設定、プラグイン設定、トランジェント 期限切れのトランジェント、古いプラグイン設定
wp_comments コメントとトラックバック スパムコメント、ごみ箱に入れたコメント
wp_commentmeta コメントのメタデータ 削除されたコメントのAkismetメタデータ
wp_usermeta ユーザーメタデータ セッショントークン、プラグインユーザーデータ
wp_termmeta カテゴリとタグのメタデータ 孤立したタームメタデータ

データベース膨張の一般的な原因

投稿のリビジョン

WordPressは、投稿やページで「下書き保存」または「更新」をクリックするたびにリビジョンを保存します。50回編集された投稿は、wp_postsテーブルに50のリビジョンが保存され、それぞれ独自のpostmetaエントリを持ちます。数百の投稿があるサイトでは、リビジョンが数千の不要なデータベース行を占めることがあります。

トランジェント

トランジェントは、WordPressコアやプラグインによってwp_optionsテーブルに保存される一時的なデータです。期限が設定されていますが、WordPressは期限切れのトランジェントを自動的に削除しません。時間が経つにつれて蓄積し、特に多くのプラグインがあるサイトではoptionsテーブルを大幅に増加させることがあります。

孤立したデータ

投稿を削除すると、そのメタデータ(wp_postmetaエントリ)が削除されないことがあります。同様に、コメント、ユーザー、またはタームを削除すると、孤立したメタデータ行が残ることがあります。無効化されたプラグインや削除されたプラグインは、しばしばデータベーステーブルを残し、スペースを消費し、データベースを混乱させます。

スパムおよびごみ箱に入れたコンテンツ

スパムコメント、ごみ箱に入れた投稿、およびごみ箱に入れたコメントは、手動で空にされるまでデータベースに残ります。Akismetや他のスパムフィルターを使用しているサイトでは、定期的にクリーンアップが必要な数千のスパムコメントが蓄積されることがあります。

自動ドラフト

WordPressは、投稿エディターで「新規追加」をクリックすると、自動ドラフト投稿を作成します。たとえ公開しなくても、これらは時間とともに蓄積され、編集セッションが終了した後は目的を果たさなくなります。

SQLによる手動データベースクリーンアップ

SQLに慣れている方は、phpMyAdminやデータベースクライアントを使用して直接クリーンアップできます。クリーンアップクエリを実行する前に、必ずデータベースのバックアップを取ってください。

投稿のリビジョンを削除

-- すべての投稿リビジョンを削除
DELETE FROM wp_posts WHERE post_type = 'revision';

-- 孤立したpostmetaを削除(削除された投稿のメタデータ)
DELETE pm FROM wp_postmeta pm
LEFT JOIN wp_posts p ON pm.post_id = p.ID
WHERE p.ID IS NULL;

トランジェントのクリーンアップ

-- 期限切れのトランジェントを削除
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();

-- 期限切れのトランジェントのデータを削除
DELETE FROM wp_options
WHERE option_name LIKE '%_transient_%'
AND option_name NOT LIKE '%_transient_timeout_%';

スパムおよびゴミ箱のコメントを削除

-- スパムコメントを削除
DELETE FROM wp_comments WHERE comment_approved = 'spam';

-- ゴミ箱のコメントを削除
DELETE FROM wp_comments WHERE comment_approved = 'trash';

-- 孤立したコメントメタデータを削除
DELETE cm FROM wp_commentmeta cm
LEFT JOIN wp_comments c ON cm.comment_id = c.comment_ID
WHERE c.comment_ID IS NULL;

プラグインベースのデータベースクリーンアップ

GUIベースのアプローチを好む場合、スケジュール機能を持ついくつかのプラグインがデータベースの最適化を処理します:

WP-Optimize

WP-Optimizeは、リビジョン、ドラフト、スパム、トランジェント、孤立したデータをクリーンアップする無料のプラグインです。また、データベーステーブルを最適化し、スケジュールされたクリーンアップをサポートします。Proバージョンはマルチサイトサポートと高度なスケジューリングを追加します。

WP Rocketデータベース最適化

WP Rocketには、リビジョン、自動ドラフト、ゴミ箱の投稿、スパムコメント、トランジェント、テーブルの最適化を処理するデータベースタブがあります。WP Rocketは主にキャッシュプラグインであるため、パフォーマンスの最適化とともにデータベースのクリーンアップを1つのツールで行えます。

Advanced Database Cleaner

このプラグインは、無効化されたプラグインによって残されたテーブルや孤立したcronイベントを検出することで、より深く掘り下げます。テーブルをWordPressコア、プラグイン作成、または不明として分類し、削除しても安全なテーブルを特定するのに役立ちます。

プラグイン 無料版 スケジュールされたクリーンアップ テーブル検出
WP-Optimize はい はい 基本
WP Rocket いいえ(プレミアムのみ) はい いいえ
Advanced Database Cleaner はい Proのみ はい(詳細)

wp-config.phpの最適化

wp-config.phpファイルにこれらの定数を追加することで、データベースの膨張を防ぎます:

投稿リビジョンの制限

// 投稿ごとに5つのリビジョンのみ保持(推奨)
define( 'WP_POST_REVISIONS', 5 );

// リビジョンを完全に無効にする(ほとんどのサイトには推奨されません)
define( 'WP_POST_REVISIONS', false );

リビジョンを5に設定することで、間違いから回復するための十分な履歴を提供し、無制限のリビジョンの増加を防ぎます。頻繁に編集されるコンテンツが多いサイトには、10のリビジョンが合理的な代替案です。

ゴミ箱の自動空にする

// 7日ごとにゴミ箱を空にする(デフォルトは30日)
define( 'EMPTY_TRASH_DAYS', 7 );

// ゴミ箱を無効にする(アイテムは即座に削除 - 注意して使用)
define( 'EMPTY_TRASH_DAYS', 0 );

自動保存の間隔

// 自動保存の間隔を5分に増やす(デフォルトは60秒)
define( 'AUTOSAVE_INTERVAL', 300 );

データベーステーブルの最適化

行を削除した後、断片化されたスペースを回収するためにOPTIMIZE操作を実行します:

OPTIMIZE TABLE wp_posts, wp_postmeta, wp_options, wp_comments, wp_commentmeta;

これを毎月または大規模なクリーンアップ操作の後にスケジュールします。ほとんどのクリーンアッププラグインは、スケジュールされたタスクにテーブルの最適化を含んでいます。

自動クリーンアップのスケジューリング

自動スケジュールを設定します:週ごとのトランジェントとスパムのクリーンアップ、月ごとのリビジョン削除とテーブル最適化、四半期ごとの孤立したプラグインテーブルの監査。WP-OptimizeとWP Rocketはどちらもスケジュールされたクリーンアップをサポートしています。オフピーク時間に設定してください。

データベースサイズの監視

データベースのサイズを追跡して、膨張を早期に発見します。個々のテーブルサイズを確認するには、このクエリを実行してください:

SELECT table_name AS 'テーブル',
       ROUND(data_length / 1024 / 1024, 2) AS 'データ (MB)',
       table_rows AS '行数'
FROM information_schema.tables
WHERE table_schema = 'your_database_name'
ORDER BY (data_length + index_length) DESC
LIMIT 20;

wp_optionsが5 MBを超えるか、wp_postmetaが100 MBを超える場合は、クリーンアップの時期です。これらのテーブルは頻繁にクエリされるため、そのサイズはページの読み込み時間に直接影響します。

データベース最適化をキャッシング、画像最適化、サーバー構成と併せて行う包括的なパフォーマンス最適化アプローチについては、私たちのWordPressスピード最適化ガイドをお読みください。メンテナンスルーチンの一環として継続的なデータベースの健康を維持するためには、私たちのWordPressメンテナンスガイドをご覧ください。

詳細については、公式ドキュメントを参照してください: WordPress データベース API.

よくある質問

データベースから投稿のリビジョンを削除するのは安全ですか?

はい、投稿のリビジョンを削除することは安全で、公開されたコンテンツには影響しません。リビジョンはドラフト変更の履歴的スナップショットです。コンテンツが確定すると、リビジョンはほとんどのサイトにとって目的を果たさなくなります。ただし、クリーンアップを行う前には必ずデータベースのバックアップを取ってください。

データベースの最適化はサイトの速度を目に見えて改善しますか?

改善の程度は、データベースの膨張具合によります。50,000行以上の孤立した行や10 MBを超えるwp_optionsテーブルを持つサイトは、ページの読み込み時間や管理ダッシュボードの応答性に目に見える改善が見られます。小規模なサイトでは、わずかな改善が見られるかもしれません。データベースの最適化は、キャッシングや他のパフォーマンス対策と併せて行うことで、累積的な改善が得られます。

WordPressデータベースをどのくらいの頻度で最適化すべきですか?

定期的にコンテンツを更新するアクティブなサイトでは、月に一度の最適化が良い基準です。頻繁にコメントやWooCommerceの取引、フォームの送信がある高トラフィックサイトは、月ごとのテーブル最適化とともに週ごとのトランジェントとスパムのクリーンアップが有益です。

データベースクリーンアッププラグインはサイトを壊す可能性がありますか?

WP-OptimizeやWP Rocketのような信頼できるプラグインは、安全に設計されています。これらは既知の膨張カテゴリ(リビジョン、トランジェント、スパム)を対象としており、重要なデータには触れません。プラグイン固有のテーブルを手動で削除する際にはリスクが増します。テーブルが必要かどうかわからない場合は、そのままにしておき、まずその目的を調査してください。

OPTIMIZE TABLEと行を削除することの違いは何ですか?

行を削除することは、テーブルからデータを取り除きます。OPTIMIZE TABLEは、行が削除された後にテーブルの物理ストレージを再編成し、ディスクスペースを回収し、データファイルをデフラグします。これをファイルを削除すること(行を削除すること)とハードドライブをデフラグすること(テーブルを最適化すること)に例えることができます。

WordPressテーブルにはInnoDBとMyISAMのどちらを使用すべきですか?

WordPressはバージョン5.5以降、デフォルトでInnoDBを使用しており、推奨されるストレージエンジンです。InnoDBは行レベルのロック(同時ユーザーに適している)、トランザクション、およびクラッシュリカバリをサポートしています。MyISAMは読み取り重視の操作に対しては高速ですが、これらの信頼性機能が欠けています。データベースにMyISAMテーブルが見つかった場合、InnoDBに変換することが一般的に推奨されます。

無効化されたプラグインによって残されたテーブルをどのように特定しますか?

Advanced Database Cleanerプラグインは、非コアテーブルを検出して分類できます。あるいは、SQLクエリSHOW TABLESを実行し、テーブル名をWordPressコアテーブルおよび現在アクティブなプラグインと比較します。無効化されたプラグインと一致するプレフィックスを持つテーブルは削除候補です。

WooCommerceは大きなデータベースの膨張を引き起こしますか?

はい。WooCommerceは、注文データ、製品メタデータ、顧客セッション、アクティブなストアで大幅に増加するトランジェントを保存します。WooCommerce > ステータス > ツールを使用して、期限切れのトランジェントとセッションを定期的にクリアしてください。

あらゆる角度からパフォーマンスを最適化

WP Rocketは、キャッシング、データベースのクリーンアップ、パフォーマンスの最適化を1つのプラグインで処理し、サイトをスムーズに運営できます。

WP Rocketを探る →

よくある質問

WordPressデータベースはどのくらいの頻度で最適化すべきですか?
ほとんどのサイトでは、月に1回の最適化で十分です。高トラフィックのサイトやアクティブなWooCommerceストア、フォーラムを持つサイトは、週に1回最適化するべきです。WP-Optimizeのような自動化ツールを使えば、スケジュールに沿ってこれを行えます。
データベースから投稿リビジョンを削除するのは安全ですか?
はい、古い投稿リビジョンを削除するのは安全で、一般的に推奨されています。WordPressはデフォルトで無制限のリビジョンを保存するため、何千もの行が追加されることがあります。wp-config.phpにREVISIONS定数を追加することで、リビジョンの数を制限できます。
データベースの最適化はサイトの速度を改善しますか?
データベースの最適化は通常、クエリの実行時間を短縮し、サーバーの応答時間(TTFB)を改善します。特にWooCommerceの製品ページや検索結果のような複雑なクエリを持つ動的ページでその影響が顕著です。
バックアップの前にデータベースを最適化すべきですか、それとも後ですか?
最適化を実行する前に、必ず完全なデータベースバックアップを作成してください。これにより、クリーンアッププロセス中に何か問題が発生した場合でもデータを復元できます。
孤立したメタデータ行とは何ですか?安全に削除できますか?
孤立したメタデータは、もはや存在しない投稿、ユーザー、コメントを参照するメタテーブルの行です。これらは安全に削除でき、削除されたプラグインやコンテンツから蓄積されることがよくあります。WP-Optimizeのようなツールを使えば、これらのエントリを特定してクリーンアップできます。

この投稿をシェア

著者について

Erik Keller
Erik Keller

WordPressエキスパート

テーマ、プラグイン、WooCommerce開発に豊富な経験を持つシニアWordPressスペシャリスト。WordPressソリューションでビジネスの成功を支援することに情熱を注いでいます。

WordPressWooCommerceテーマ開発プラグイン開発パフォーマンス最適化

最新情報を入手

最新のWordPressのヒントとチュートリアルをメールで受け取りましょう。