WordPressサイトの構成要素はどれも欠かせませんが、データベースは特に重要な存在。実質的にサイトのすべての情報を保存し、アクセスすることになります。したがって、WordPressデータベースの最適化は適切に行わなければなりません。

肥大化やパフォーマンスの問題を抱えるデータベースは、サイト速度を低下し、SEOに悪影響を及ぼします。さらには、全体的なユーザーエクスペリエンス(UX)への影響、トラフィックの低下、検索結果における表示順位の低下などの問題も発生する可能性があります。

そこで今回は、WordPressデータベースの最適化を様々な角度からご紹介。取り入れたい最適化のヒントと一般的な構造についてご説明していきます。また、データベースの保守管理に役立つツールやサービスも取り上げます。

WordPressデータベースの構造

一言で言えば、WordPressデータベースはサイトを支える中軸。コンテンツ、ユーザーデータ、設定など、ほぼすべての情報を格納しています。WordPressでは、データベースの「テーブル」が特定の情報を保存します。

MySQLまたはMariaDBのようなデータベース管理システムを使用し、phpmyAdminAdminerなどのツールでアクセスします。

phpMyAdminを使用してWordPressのデータベースにアクセス
phpMyAdminを使用してWordPressのデータベースにアクセス

例えば、wp_postsテーブルには投稿と固定ページ、wp_usersテーブルにはサイトのユーザーに関する情報が格納されています。このテーブルについて、もう少し詳しく見ていきましょう。

WordPressをインストールすると、デフォルトのテーブルが生成されますが、これとは別に、プラグインやテーマ、WordPressのバージョンによって、特定の関連データを保存するためのテーブルも作成されることがあります。

このモジュラーアーキテクチャは、機能性を広げてくれるため、多くの面で利点があります。しかしその反面、余計なテーブルが多すぎる(そして管理が行き届いていない)と肥大化につながります。

WordPressのデータベース構造を理解することは、以下2つ観点から非常に大切です。

  • パフォーマンス:データベースをうまく構成することで、より迅速にデータを取得でき、読み込み時間やパフォーマンスを改善することができる。
  • メンテナンス:どのテーブルがサイトのどの部分に対応しているかを把握することで、メンテナンスが効率化される。例えば、特定のプラグインが問題を引き起こしている場合、関連するテーブルで素早くトラブルシューティングを行うことが可能。

データベースのテーブルを定期的にクリーニングし、最適化することで、テーブルが肥大化し扱いにくくなるのを防ぐことができます。パフォーマンスの低下はビジネス全体に影響を与える可能性があり、なんとしても避けたいものです。

WordPress固有のテーブル

WordPressに限らず、あらゆるタイプのサイトでデータベースが使われています。WordPressには、独自のデータベーステーブルの種類と役割があり、これらを理解して初めて、適切に最適化を行うことができます。

今回はすべてのテーブルは取り上げませんが、以下、いくつかご紹介します。

  • wp_options:サイト全体の設定が保存され、最もアクセスすることになるテーブルの1つ。このテーブルを最適化して、無駄のない整理された状態を保ちたいところ。
  • wp_postmeta:投稿のメタデータを格納。サイトが大きくなるにつれ、データベース内で最も大きなテーブルの1つになる可能性がある。
  • wp_userswp_usermeta:サイトのユーザーおよびそのメタデータに関連するすべての情報を格納。まれに、WordPressにログインできない状態になった場合、これらのテーブルでパスワードの変更が必要になることがある。

なお、サイトにプラグインやテーマを追加するたび、この構造は変更する可能性があります(とはいえ、テーマやプラグインが上記のテーブルを削除してしまうということは滅多にない)。

これらの潜在的な変更を定期的に確認し、把握しておくことが重要で、最適化されたデータベースを維持するための鍵となります。

WordPressデータベースを最適化する必要性

WordPressデータベースの最適化は、サイト管理の良い習慣であるだけでなく、シームレスなエクスペリエンスを提供したいサイトにとって必要不可欠。データベースは、サイトの重要なデータをすべて保存する中核となるストレージであり、データベースの健全性は、サイトのパフォーマンス、速度、そして信頼性に直接影響します。

ワークフローに定期的なWordPressデータベースの最適化を取り入れることには、以下のようなメリットがあります。

  • サイトの速度とパフォーマンスの向上:WordPressのデータベースには、一時的なオプション、投稿のリビジョン、スパムコメント、古い下書きなど、時間の経過とともに不要または冗長なデータが蓄積されていきます。これによってデータベースが肥大化し、情報の取得が遅くなります。
  • ユーザーエクスペリエンスの改善:ユーザーはスムーズで高速なブラウジング体験を期待しているもの。最適化されたデータベースは、ページを素早く読み込み、データ処理を効率化します。簡単に言えば、サイトでのインタラクションはデータベースクエリに依存しており、効率が上がれば、ユーザーエクスペリエンスも改善されます。

また、データベースの最適化が必要になるより高度な理由も。例えば、最適化されていないデータベースでは、データを検索・提供するためにサーバーにより大きな負荷がかかります。これは、リソースに制限のある共用サーバーでは致命的な問題。ちなみに、これがKinstaが共用サーバーを提供していない理由の一つでもあります。

また、サイトが成長するにつれて、データベースの規模も大きくなるため、最初は小規模で管理しやすいシステムでも、すぐに複雑化されていきます。定期的にデータベースの最適化を行えば、パフォーマンスを損なうことなく、サイトの拡大に対応できます。

WordPressデータベースの最適化を行うことで、応答時間が向上します。数秒でも読み込みが遅くなれば、直帰率の増加やトラフィックの減少につながり、検索順位も低下します。

定期的なメンテナンスとクリーニング

WordPressのデータベースをクリーニングし、定期的にメンテナンスを行うことで、サイトをスムーズに運営することができます。データベースは、時間の経過とともに不要なデータの蓄積によって肥大化する可能性があるため、定期的かつ一貫したワークフローが重要になります。

また、ツールやサービスをうまく活用することも大切で、WordPressには、最適化されたデータベースを維持するための様々な機能が用意されています。

データベースの最適化に役立つプラグインも多数あり、WP-Optimizeは特に人気の選択肢です。WordPress.orgで高い評価を集めており、無料かつ定期的に更新が行われています。

WP-Optimize
WP-Optimize

後ほど、このプラグインを使用してWordPressデータベースを最適化する方法を見ていきますが、別のプラグインを使用してもOKです。Kinstaをご利用の場合は、選択したプラグインが使用が禁止されているプラグインでないことをご確認ください。

次のセクションからは、データベースの最適化を手動で行う方法とWP-Optimizeを使って実行する方法を見ていきます。また、Kinsta独自の自動最適化機能についてもご紹介します。まずは、最適化の準備から始めましょう。

最適化を行う前に取り組むべきこと

データベースの最適化を行う前に、実行すべき簡単なタスクがいくつかあります。まずは、サイトとデータベースの完全なバックアップを取ること。これによって、最悪の事態が起こり、サイトが破損しても数分で元に戻すことができます。

また、使用していないプラグインやテーマは削除しておきましょう。これは、データベースの最適化が行いやすくなるだけでなく、セキュリティの強化にも役立ちます。

WordPressのプラグイン画面
WordPressのプラグイン画面

ただし、プラグインやテーマによっては、削除後も不要なテーブルが残る可能性があることに注意してください(これこそがまさにデータベースの最適化を行う理由)。どのプラグインやテーマが一時的なデータを残すのかを把握しておくと、後々役に立ちます。

最後に、データベース管理ツールにログインし、データベースエラーがないかどうかを確認しましょう。データベース関連のエラーは、当然パフォーマンス上の問題を示しているため、最適化を実行する前に解決しておく必要があります。

これを行うには、すべてのテーブルを選択し、「Check table」(テーブルを確認する)などをクリックし、レポートを作成します。

phpMyAdminで「Check table」を選択
phpMyAdminで「Check table」を選択

「OK」などのような表示があれば問題ありません。エラーが表示される場合は、サポートに問い合わせて、エラーの解決を優先しましょう。

1. データベースのテーブルを最適化する

最初のステップは、データベース内のテーブルを最適化すること。自分で作業を行う場合は、管理ツール(今回の例ではphpMyAdminを使用)の「Database」からデータベースを選択します。

phpMyAdminでデータベースを選択
phpMyAdminでデータベースを選択

多くの場合、すでにWordPressサイトのデータベースが表示されています。データベース内のテーブルが一覧表示されたらすべてを一括選択し、ドロップダウンメニューから「Optimize table」を選択し、「Go」をクリックします。

すべてのデータベーステーブルを選択して最適化
すべてのデータベーステーブルを選択して最適化

しばらくすると、データベース内の各テーブルのステータスを示すレポートが表示されます。

phpMyAdminの最適化レポート
phpMyAdminの最適化レポート

WP-Optimizeで、「WP-Optimize」>「データベース」>「最適化」に移動し、「データベーステーブルの最適化」の横にある、「最適化を実行する」をクリックします。

WP-Optimizeダッシュボード内の「Run optimization」ボタンをクリック
WP-Optimizeダッシュボード内の「Run optimization」ボタンをクリック

すると、すべてのテーブルが実行され、最適化完了のメッセージが表示されます。次に投稿の修正に移りましょう。

2. 投稿リビジョンをクリーンアップする

WordPressの投稿リビジョンは、コンテンツの修正や更新を行うたびに蓄積されていきます。不要なリビジョンは、SQLクエリを使って削除しましょう。以下のコードを1行実行するのが、最も手っ取り早い方法です。

DELETE FROM wp_posts WHERE post_type = 'revision’;

これによって、テーブルからすべてのタイプのリビジョン投稿が削除されます。ただし、他のテーブルにも関連するデータがあり、これらをすべてキャプチャして削除するには、以下のコードを使用します。

DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_term_relationships WHERE object_id NOT IN (SELECT ID FROM wp_posts);
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);

上記コードをコピー&ペーストする際には、データベースの正しいテーブル接頭辞を正しいものに置き換えてください。プラグインを使用すると、この作業を数秒で完了することができます。WP-Optimizeでは、先ほどの最適化と同様、WordPress管理画面でワンクリックで実行可能です。

WP-Optimizeでリビジョンと自動下書きを削除
WP-Optimizeでリビジョンと自動下書きを削除

その後の対策として、wp-config.phpファイルで保存するリビジョン数を制限することができます。以下の行をファイルに貼り付けて、変更を保存します。

define( 'WP_POST_REVISIONS', X );

Xは、保存したいリビジョン数に置き換えてください。falseを指定してリビジョンを一切保存しないようにすることも可能ですが、必要時に復元できるよう、少なくとも1つはリビジョンを保存するようにすることをお勧めします。

3. スパムコメントを削除してゴミ箱を空にする

SQLクエリを使ってスパムコメントを削除することも可能です。コメントをモデレートする(確認して承認するか削除するかを決める)場合、承認しないコメントは30日間データベースに保存されます。つまり、その期間内にスパムとしてマークされたコメントもデータベースに残ることになります。

データベース管理ツールでSQLクエリを数行実行するだけで、このようなコメントを完全に削除できます。

DELETE FROM wp_comments, wp_commentmeta
USING wp_comments
LEFT JOIN wp_commentmeta ON wp_comments.comment_ID = wp_commentmeta.comment_id
WHERE wp_comments.comment_approved = 'spam’;

WordPress内でゴミ箱に保存されているアイテムも同様に、以下のSQLクエリで削除可能です。

DELETE p, pm, tr
FROM wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID = pm.post_id
LEFT JOIN wp_term_relationships tr ON p.ID = tr.object_id
WHERE p.post_status = 'trash’;

削除後は投稿リビジョンと同じように、wp-config.phpファイルでゴミ箱を空にする時間を設定することができます。

define( 'EMPTY_TRASH_DAYS', X )

WP-Optimizeには、スパムコメントとWordPressのゴミ箱を空にするのに役立つ3つの機能があります。

WP-Optimizeのスパムコメント、ゴミ箱アイテム、未承認コメントを削除するオプション
WP-Optimizeのスパムコメント、ゴミ箱アイテム、未承認コメントを削除するオプション

また、未承認コメントを削除する機能もあり、状況によっては便利かもしれませんが、コメントをモデレートし、必要に応じて削除することをお勧めします。

4. 未使用のタグを削除する

タクソノミはWordPressの便利な仕組みですが、時とともに肥大化していきます。これは、データベース最適化の典型的な事例で、他の操作と同様、SQLクエリを使って削除することができます。

DELETE t, tt
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy = 'post_tag' AND tt.count = 0;

WP-Optimizeで未使用のタグを削除するには、「投稿メタデータのクリーン」を使用します。

WP-Optimizeの「Clean post meta data」機能で孤児になった投稿メタデータを削除できる
WP-Optimizeの「Clean post meta data」機能で孤児になった投稿メタデータを削除できる

この設定はカテゴリやその他のデータも削除することがありますが、特に他の投稿や固定ページで使用していない場合には安全です。

5. ピンバックとトラックバックを無効にする

今日、ピンバックトラックバックの使用はそれほど一般的ではありませんが、有効なままにしておくと、データベース内のデータが乱雑になってしまう可能性があります。まずは、この設定が無効になっているかどうかを確認しましょう。WordPress管理画面の「設定」>「ディスカッション」画面に移動します。

ディスカッション画面にあるピンバックとトラックバック設定
ディスカッション画面にあるピンバックとトラックバック設定

デフォルトの投稿設定」セクションにある「投稿中からリンクしたすべてのブログへの通知を試みる」と「新しい投稿に対し他のブログからの通知(ピンバック・トラックバック)を受け付ける」のチェックを外して、変更を保存します。その後、データベース管理ツールに戻り、以下のクエリを実行してください。

DELETE c, cm
FROM wp_comments c
LEFT JOIN wp_commentmeta cm ON c.comment_ID = cm.comment_id
WHERE c.comment_type IN ('trackback', 'pingback’);

いずれもコメントと同じ場所にありますが、タイプが異なり、クエリが対象とするものです。WP-Optimizeにはそれぞれ2つの設定があります。

WP-Optimizeでトラックバックとピンバックを削除
WP-Optimizeでトラックバックとピンバックを削除

これで、データベースでトラックバックやピンバックが表示されなくなります。

Kinstaのデータベース自動最適化

Kinstaでは、すべてのサイトに対して24時間継続的に自動最適化が行われるため、Kinstaのお客様は、データベースの最適化にWordPressプラグインを使用する必要はありません。SQLクエリやデータベース内のデータ位置など、WordPressデータベースの最適化に関する知識やスキルも不要です。

継続的なデータベースの最適化は、アプリケーションパフォーマンス監視(APM)の一部で、手間をかけることなく、WordPressデータベース(およびサイト)が効率的な状態に保たれます。

APMは、トランジェント、孤立したメタデータ、スパムコメントなどの不要なデータを削除し、データベースをクリーンアップするため、最適化されたデータベースを自動的に維持することが可能です。

Kinsta APM
Kinsta APM

今回はデータベース最適化がテーマのため、APMの使用方法については割愛しますが、ドキュメントにて詳しくご紹介しています。データベースの監視に関しは、APMで最も遅いSQLクエリを把握することができます。

Kinsta APMで確認できる最も遅いデータベースクエリ
Kinsta APMで確認できる最も遅いデータベースクエリ

Kinsta APMは、MyKinstaにログイン後、「APM」画面で利用可能です(「APMを有効化」をクリックしてオン)。

MyKinstaでAPMを有効化
MyKinstaでAPMを有効化

APMを有効化したら、データの照合が完了するまで少し待ちましょう。完了すると、最適化が必要なクエリを確認できるようになります。

データベースクエリを最適化してパフォーマンスを改善

使用するデータベースクエリを最適化することは、WordPressサイトのパフォーマンスと速度の改善に非常に重要です。クエリが効率化されることで、データの取得が高速になり、読み込み時間の短縮およびユーザー体験の向上につながります。

WordPressデータベースの最適化にクエリを使用することを踏まえ、クエリをより効率化するためのヒントは以下のとおり。

  • クエリ構造の最適化:この記事で例に挙げているクエリでは、ワイルドカード(またはアスタリスク)が使用されていません。SELECT *を使用する代わりに、必要なカラムを特定しましょう。また、可能な限りサブクエリではなくJOINを使用します。サブクエリは、構造が適切でなかったり、大きなデータセットを含んでいると、効率が下がる可能性があります。
  • クエリキャッシュの使用:Redisなどのツールは、クエリの結果をメモリに保存します。つまり、次回以降再びデータベースに問い合わせる手間を省き、クエリの結果をキャッシュから提供できます。

以上はざっくりしたヒントですが、他にもできることは多数あります。

高度な最適化とトラブルシューティング

インデックスは、データベースに「簡易マニュアル」を追加するのに便利です。これによって、テーブルのすべての行をスキャンすることなく、サーバーが必要なデータをより素早く見つけることができます。

これを実行するには、クエリで頻繁に使用されるカラムを特定し、インデックスを追加します。phpMyAdmin(またはその他の類似ツール)から追加でき、まずはインデックスを作成したいテーブルをクリックして、「Structure」タブを開きます(phpMyAdminの場合)。

phpMyAdminでテーブルの「Structure」タブを開く
phpMyAdminでテーブルの「Structure」タブを開く

続いて、インデックスを作成したいカラムを選択し、テーブル下部にある「Index」を選択します。

phpMyAdminでカラムのインデックスを作成
phpMyAdminでカラムのインデックスを作成

変更を保存すると、インデックスが生成されます。

EXPLAIN文は、MySQLがどのようにクエリを実行するかを把握するのにも役立ち、非効率な部分を見つけたり、クエリがインデックスとどのように相互作用するかがわかります。既存のクエリの前にこの文を追加して実行します。

EXPLAIN文の前にクエリを実行したときの出力
EXPLAIN文の前にクエリを実行したときの出力

EXPLAIN文に関するより詳しい情報は、MySQLの公式ドキュメントを参照してください。

パフォーマンスの監視

WordPressデータベースのパフォーマンスを監視することは、サイトを運営する上で欠かせません。問題が深刻化する前に潜在的な問題を特定し、サイトの高い効率性と応答性を維持するのに役立ちます。

遅いクエリに対してEXPLAIN文を使用するなど、この記事でご紹介しているヒントはパフォーマンス監視に有用ですが、これだけに留まりません。例えば、phpmyAdminでは、サーバーの「Status」タブで独自のパフォーマンス指標を見ることができます。

phpmyAdminの「Status」タブ
phpmyAdminの「Status」タブ

クエリの実行時間とプロセス(「Query statistics」タブ)が表示されるため、最適化の余地があるクエリを特定するのに役立ちます。より高度な監視には、MySQL Workbenchが一役買ってくれます。

MySQL Workbenchのメインユーザインターフェース
MySQL Workbenchのメインユーザインターフェース

データベースの設計、開発、管理のための高度な機能が搭載されており、データベースの微調整に役立つパフォーマンスレポートや診断も取得できます。

WordPressでは、Query Monitorプラグインで、データベースクエリ、フック、条件分岐、HTTPリクエストなどを監視可能です。

Query Monitor
Query Monitor

遅いクエリを検出し、その原因となっているプラグインやテーマを特定するのに特に便利ですが、開発用プラグインであるため、本番サイトには向かないかもしれません。

WordPressで大規模データベースを扱うヒント

WordPressサイトのコンテンツ、ユーザー、トラフィックが増えるにつれ、データベースも必然的に成長していくもの。データベースが大規模になると、さまざまな問題に遭遇(または懸念)することになります。

今回ご紹介したヒントのほとんどは、大規模なデータベースを想定していますが、一般的なデータベースよりも大きいデータベースに関しては、以下のようなヒントも役に立つはずです。

  • 古いデータのアーカイブ:すべてのデータを本番サイトで維持するのではなく、アクセスすることのない古い投稿やユーザーデータをアーカイブすることを検討してください。
  • コンテンツデリバリネットワーク(CDN)の使用:画像、動画、ダウンロードなどの静的リソースを別のサーバーからオフロードして提供することで、サイトの負荷を軽減し、高速化を図ることができます。また、世界中のユーザーにより高速にサイトを配信することができます。
  • カスタムクエリ:WordPress開発者であれば、テーマやプラグインに効率的なクエリを書くことを心がけることで、必要なものだけを取得し、効率を高く保つことができます。

テーブルのパーティショニングやデータベースシャーディングのような高度なテクニックを取り入れることも可能です。これらの操作は、データを複数のデータベースに分割するもので、専門知識が求められることから、開発者による管理が必要になるのが通例です。

データベースと接続されたサイトのパフォーマンス改善には、開発者の協力が欠かせません。KinstaのWordPress専用マネージドホスティングは、スケーラビリティに優れ、プラットフォームに最適化されています。

KinstaのWordPress専用マネージドホスティング
KinstaのWordPress専用マネージドホスティング

ホスティングプランは月額35ドルからで、シンプルなブログから大企業まで、さまざまなプランをご用意しています。要件を問わず、長期的なホスティングパートナーをお探しの方は、ぜひ一度お問い合わせください

まとめ

WordPressのデータベースは、車で言うなればエンジンのような存在。チューニングなしには最高のパフォーマンスを発揮することができません。WordPressデータベースの最適化を怠れば、検索結果の表示順位で1位から最下位に転落する可能性すらあります。高速で動作するパフォーマンスの高いデータベースが、ビジネス成功の鍵を握ると言っても過言ではありません。

データベースの最適化にはさまざまな方法がありますが、手動での操作、プラグイン、そしてKinsta独自の自動最適化を組み合わせることで、最高の効果を得ることができます。自動最適化は、ログインしたり、特定のツールを使用したりすることなく、数々のタスクを実行するのに便利です。

今回ご紹介したWordPressデータベース最適化のヒントを実践し、特に効果が見られたものがありましたら、ぜひ以下のコメント欄でお知らせください。

Jeremy Holcombe Kinsta

Kinstaのコンテンツ&マーケティングエディター、WordPress開発者、コンテンツライター。WordPress以外の趣味は、ビーチでのんびりすること、ゴルフ、映画。高身長が特徴。