严潇健
互联网引流变现最靓的仔

WordPress 性能优化:解决负载高、响应慢、数据库卡死

# 1. 创建脚本
cat > /tmp/add_indexes_simple.sh << 'EOF'
#!/bin/bash

echo "请输入 MySQL root 密码:"
read -s MYSQL_PWD

echo "正在扫描 WordPress 站点..."

# 获取所有 WordPress 数据库
for DB in $(mysql -uroot -p"$MYSQL_PWD" -e "SHOW DATABASES;" 2>/dev/null | grep -v "Database\|information_schema\|performance_schema\|mysql\|sys"); do
# 检查是否有 wp_posts 表
HAS_TABLE=$(mysql -uroot -p"$MYSQL_PWD" -e "USE $DB; SHOW TABLES LIKE 'wp_posts';" 2>/dev/null | wc -l)

if [ $HAS_TABLE -gt 0 ]; then
echo "处理数据库: $DB"

# 添加索引
mysql -uroot -p"$MYSQL_PWD" -e "USE $DB; ALTER TABLE wp_posts ADD INDEX IF NOT EXISTS idx_post_type_status_id (post_type, post_status, ID);" 2>/dev/null
mysql -uroot -p"$MYSQL_PWD" -e "USE $DB; ALTER TABLE wp_posts ADD INDEX IF NOT EXISTS idx_post_date (post_date);" 2>/dev/null

echo " ✅ $DB 完成"
fi
done

echo "所有索引添加完成!"
EOF
# 2. 添加执行权限
chmod +x /tmp/add_indexes_simple.sh
# 3. 运行脚本
/tmp/add_indexes_simple.sh

添加的两个索引

1️⃣ 索引一:idx_post_type_status_id

ALTER TABLE wp_posts ADD INDEX idx_post_type_status_id (post_type, post_status, ID);

2️⃣ 索引二:idx_post_date

ALTER TABLE wp_posts ADD INDEX idx_post_date (post_date);

🎯 为什么要添加这两个索引?

核心原因:WordPress 最常见的慢查询

WordPress 主题和插件经常执行这样的查询:

-- 查询1:获取文章列表(分页)
SELECT * FROM wp_posts 
WHERE post_type = 'post' 
AND post_status = 'publish'
ORDER BY ID ASC
LIMIT 100000, 20;

-- 查询2:按时间排序(最新文章)
SELECT * FROM wp_posts 
WHERE post_type = 'post' 
AND post_status = 'publish'
ORDER BY post_date DESC
LIMIT 20;

没有索引时的问题:

┌─────────────────────────────────────┐
│  没有索引 = 全表扫描                 │
├─────────────────────────────────────┤
│  📖 就像在一本没有目录的书里找内容   │
│  🔍 必须一页一页翻看                 │
│  💾 扫描几十万甚至上百万行数据       │
│  ⏱️  查询耗时:30秒 - 30分钟         │
│  💿 磁盘 I/O:99% 满载              │
│  🔥 服务器负载:飙升到 68+           │
└─────────────────────────────────────┘

有索引后:

┌─────────────────────────────────────┐
│  有索引 = 快速定位                   │
├─────────────────────────────────────┤
│  📖 就像有目录的书                   │
│  🎯 直接翻到目标页码                 │
│  ⚡ 只扫描需要的 20 行数据           │
│  ⏱️  查询耗时:0.05 秒               │
│  💿 磁盘 I/O:< 10%                  │
│  🍃 服务器负载:正常                 │
└─────────────────────────────────────┘

📊 具体好处对比

项目 添加索引前 添加索引后 提升
查询速度 30分钟+ 0.05秒 36,000倍
服务器负载 68 6.75 ↓ 90%
磁盘 I/O 99% 7.4% ↓ 92%
CPU 空闲 2% 79% ↑ 3850%
网站响应 超时/极慢 秒开 质的飞跃

评论 抢沙发

评论前必须登录!

 

登录

找回密码

注册