2026年7月22日
2026年7月22日
WordPressの複数データベースを横断検索する方法
はじめに
WordPressサイトが成長すると、データベースも急速に膨張し、管理や検索が難しくなることがあります。特に、複数のデータベースを用いて異なるテーブル群で情報を分けて管理している場合、特定の情報を見つけるためには複数のデータベース間での検索が必要になることがよくあります。
症状・背景
- ユーザーが大量の投稿やコメントを作成し、それぞれのテーブルが大きくなりすぎた。
- カスタムプラグインを使用して、カスタムポストタイプやカスタムフィールドを管理している。
- 既存のデータベースのパフォーマンスが低下したため、新規データは別のデータベースに保存することにした。
手順・設定方法
ステップ1: MySQLクライアントを使用して接続する
# WordPressが利用しているMySQLサーバーにログインします。
mysql -u [ユーザー名] -p[パスワード]
# 接続後、使用したいデータベースを指定します。
USE database_name;
ステップ2: UNION ALLを使用した横断検索
# 各テーブルから必要な情報を取得するSQLクエリを作成し、UNION ALLで結合します。
SELECT post_id, post_title FROM wp_posts WHERE post_content LIKE '%検索ワード%';
UNION ALL
SELECT post_id, post_title FROM wp_custom_posts WHERE custom_field LIKE '%検索ワード%';
# 必要に応じてORDER BY句を追加して結果をソートします。
ステップ3: PHPスクリプトを使用した自動化
# MySQLデータベースへの接続情報を含むPHPスクリプトを作成します。
<?php
$servername = "localhost";
$username = "[ユーザー名]";
$password = "[パスワード]";
$dbname1 = "database1";
$dbname2 = "database2";
// データベースに接続します。
$conn1 = new mysqli($servername, $username, $password, $dbname1);
$conn2 = new mysqli($servername, $username, $password, $dbname2);
if ($conn1->connect_error || $conn2->connect_error) {
die("Connection failed: " . $conn1->connect_error . " / " . $conn2->connect_error);
}
// SQLクエリを実行して結果を得ます。
$sql1 = "SELECT post_id, post_title FROM wp_posts WHERE post_content LIKE '%検索ワード%'";
$result1 = $conn1->query($sql1);
$sql2 = "SELECT post_id, post_title FROM wp_custom_posts WHERE custom_field LIKE '%検索ワード%'";
$result2 = $conn2->query($sql2);
// 結果を表示します。
if ($result1->num_rows > 0) {
while($row = $result1->fetch_assoc()) {
echo "post_id: " . $row["post_id"]. " - Title: " . $row["post_title"]. "<br>";
}
}
if ($result2->num_rows > 0) {
while($row = $result2->fetch_assoc()) {
echo "post_id: " . $row["post_id"]. " - Title: " . $row["post_title"]. "<br>";
}
}
?>
ステップ4: セキュリティとパフォーマンスの最適化
# ユーザー権限を最小限に抑え、必要なアクセスのみ許可します。
GRANT SELECT ON database_name.* TO 'username'@'localhost';
# インデックスを作成してクエリ速度を向上させます。
CREATE INDEX idx_posts_search ON wp_posts(post_content);
CREATE INDEX idx_custom_search ON wp_custom_posts(custom_field);
注意事項
- <実践的な注意点1>: データベースのスナップショットを定期的に作成し、重要なデータは常にバックアップすること。
- <実践的な注意点2>: 機能テストを行い、全てのSQLクエリが想定通りに動作するように確認すること。
- <セキュリティ上の注意>: SQLインジェクション攻撃から保護するために、ユーザー入力を適切に検証および処理すること。
- <パフォーマンス/運用上の注意>: 大規模なデータベースでの横断検索は時間がかかるため、定期的な最適化とキャッシュの使用を考慮すること。
まとめ
1. データベース接続: 安全で効率的な方法でMySQLサーバーに接続します。
2. SQLクエリの構築: UNION ALLを使用して複数のテーブルから情報を取得し、横断検索を実現します。
3. PHPスクリプトの作成: 自動化のため、MySQLへのアクセスと結果表示を行うPHPスクリプトを作ります。
4. セキュリティ対策: 接続権限を最小限に保ち、適切なデータ保護を行います。
5. パフォーマンス最適化: インデックスの作成や定期的なバックアップにより、システム全体のパフォーマンスと信頼性を向上させます。
関連記事: