问了一下豆包,如何解决,核心解决方案就是建索引。(仅供参考,修改之前记得备份)

步骤如下
一、前置准备(必做)
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');
总结
- 核心建索引语句:
- 筛选索引: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);
- 验证关键:通过SHOW INDEX确认索引存在,通过EXPLAIN确认索引被使用;
- 版本适配:以上语句完全兼容 MariaDB 10.6.20,无需调整语法。
还有一点需要修改一下php文件:
文件路径为:/apps/home/model/ParserModel.php 大约442行,旧版本大约在370行左右 (旧版有两处492行还有一个地方)
$indexSql = '';
//todo:V3.1.5判断mysql是否设置了索引
if (get_db_type() == 'mysql') {
$checkIndex = parent::table('ay_content')->checkIndexSql();
foreach ($checkIndex as $item){
if($item[2] == 'ay_content_unique'){
$indexSql = ''; // 关键修改:禁用FORCE INDEX
break;
}
}
}