解决pbootcms数据多了服务器变卡的问题

建站教程
有个网站,数据大约10万条,访问量不是很高,但是,网站的症状是,网站访问变慢,几乎打不开,打开宝塔面板查看,负载和cpu100%居高不下,问了一下豆包是因为一个数据查询了19万次用了10秒,返回的数据是0,还有很多等待的进程,导致服务器资源耗尽。

问了一下豆包,如何解决,核心解决方案就是建索引。

步骤如下

一、前置准备(必做)

1.登录数据库,phpmyadmin进入数据库管理。 切换到目标数据库,

-- 切换到xxxx库(你需要优化的数据库)

USE xxxx;

2. 检查表结构(确认字段存在,避免建索引报错)

-- 查看ay_content表核心字段(确保scode/subscode/status/date等字段存在)

DESC ay_content;

✅ 预期结果:能看到scode、subscode、status、date、visits、istop、isrecommend、isheadline、sorting、id字段(和之前你提供的表结构一致)。

二、创建优化索引(核心步骤)

1. 创建「WHERE 筛选索引」(加速条件查询)

ALTER TABLE ay_content 

ADD INDEX idx_aycontent_where (scode, subscode, status, date);

✅ 执行结果:

成功:提示Table 'ay_content' altered;

重复:提示#1061 - 索引名重复(说明已创建,直接跳过)。

2. 创建「ORDER BY 排序索引」(加速排序)

ALTER TABLE ay_content 

ADD INDEX idx_aycontent_order (

    visits DESC,   -- 访问量降序

    istop DESC,    -- 是否置顶降序

    isrecommend DESC,  -- 是否推荐降序

    isheadline DESC,   -- 是否头条降序

    sorting ASC,   -- 排序值升序

    date DESC,     -- 发布日期降序

    id DESC        -- 主键降序

);

执行结果:

成功:提示Table 'ay_content' altered;

重复:提示#1061 - 索引名重复(说明已创建,直接跳过)。

三、验证索引(确认创建成功)

1. 查看指定索引(精准验证)

sql

-- 仅查看我们创建的两个优化索引

SHOW INDEX FROM ay_content 

WHERE Key_name IN ('idx_aycontent_where', 'idx_aycontent_order');


三、验证索引(确认创建成功)

1. 查看指定索引(精准验证)


-- 仅查看我们创建的两个优化索引

SHOW INDEX FROM ay_content 

WHERE Key_name IN ('idx_aycontent_where', 'idx_aycontent_order');


总结

  1. 核心建索引语句
    • 筛选索引:ALTER TABLE ay_content ADD INDEX idx_aycontent_where (scode, subscode, status, date);
    • 排序索引:ALTER TABLE ay_content ADD INDEX idx_aycontent_order (visits DESC, istop DESC, isrecommend DESC, isheadline DESC, sorting ASC, date DESC, id DESC);

  2. 验证关键:通过SHOW INDEX确认索引存在,通过EXPLAIN确认索引被使用;
  3. 版本适配:以上语句完全兼容 MariaDB 10.6.20,无需调整语法。

也许您对下面的内容还感兴趣: