问了一下豆包,如何解决,核心解决方案就是建索引。
步骤如下
一、前置准备(必做)
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,无需调整语法。