| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- -- =============================================================================
- -- EAI MySQL 建议索引(结合 Mapper / 服务层查询,与 eai 库结构一致)
- -- 执行前请:1) 在从库或备份后执行 2) 用 SHOW INDEX / EXPLAIN 确认与线上一致
- -- 若报 Duplicate key / 索引名已存在,则跳过该条
- -- MySQL 8.0+ InnoDB
- -- =============================================================================
- USE eai;
- -- ---------------------------------------------------------------------------
- -- 1) assignment
- -- 依据:AssignmentMapper selectByCourseId + ORDER BY create_time DESC
- -- 仅 idx_course_id 时常见 Using filesort;联合索引可兼顾过滤与排序
- -- ---------------------------------------------------------------------------
- -- 若线上已有单列 idx_course_id 且会保留本联合索引,可视 EXPLAIN 结果再决定是否删除单列
- CREATE INDEX idx_assignment_course_create_time
- ON assignment (course_id, create_time);
- -- 门户/教师维度按 teacher_portal_id 拉作业(若业务有此类查询,且列非空时选择性更好)
- -- CREATE INDEX idx_assignment_teacher_portal_id ON assignment (teacher_portal_id);
- -- ---------------------------------------------------------------------------
- -- 2) course_student
- -- 依据:CourseStudentMapper:按 course_id 拉人、按 student_id 拉课、dropCourse 等值双条件
- -- 原 eai.sql 无二级索引
- -- ---------------------------------------------------------------------------
- CREATE INDEX idx_course_student_course_id ON course_student (course_id);
- CREATE INDEX idx_course_student_student_id ON course_student (student_id);
- -- 若需强制「同一学生同一课一条」且已清洗完重复数据,可再考虑:
- -- ALTER TABLE course_student ADD CONSTRAINT uk_cs UNIQUE (course_id, student_id);
- -- ---------------------------------------------------------------------------
- -- 3) users
- -- 依据:UserMapper selectByOfficialNumber / Phone / OfficialEmail、selectNameByPid、
- -- IN (official_number)、登录态 id 等
- -- 原 eai.sql 无二级索引
- -- ---------------------------------------------------------------------------
- CREATE INDEX idx_users_official_number ON users (official_number);
- CREATE INDEX idx_users_pid ON users (pid);
- CREATE INDEX idx_users_phone ON users (phone);
- CREATE INDEX idx_users_official_email ON users (official_email);
- -- ---------------------------------------------------------------------------
- -- 4) ai_speaking_assignment
- -- 依据:按 assignment_id 反查口语任务扩展信息
- -- ---------------------------------------------------------------------------
- CREATE INDEX idx_ai_speaking_assignment_fk ON ai_speaking_assignment (assignment_id);
- -- ---------------------------------------------------------------------------
- -- 5) student_window_switch_record
- -- 依据:WindowSwitchRecordMapper:WHERE assignment_id = ?(且 GROUP BY 学生);
- -- 现有多为 (student_id, assignment_id) 时,无法很好支持仅 assignment 过滤
- -- 注意:表需在库中存在、列名与下划线一致(与 MyBatis-Plus 默认驼峰一致)
- -- ---------------------------------------------------------------------------
- CREATE INDEX idx_window_switch_assignment_student
- ON student_window_switch_record (assignment_id, student_id);
- -- 若上表已有 idx_student_assignment(student_id, assignment_id) 可保留,两者用途不同、可并存
- -- ---------------------------------------------------------------------------
- -- 6) 可选清理:与唯一约束重复的二级索引(减少写入与空间)
- -- ---------------------------------------------------------------------------
- -- phone_verification 上若已有 UNIQUE(phone),则普通索引 verification_phone_index 可删:
- -- ALTER TABLE phone_verification DROP INDEX verification_phone_index;
- -- course 上 idx_time_range 与 idx_course_time_range 若列完全一致,保留一个即可:
- -- ALTER TABLE course DROP INDEX idx_course_time_range;
- -- 或 DROP INDEX idx_course_time_range 保留 idx_course_time_range 其一
- -- =============================================================================
- -- 已在 eai.sql 中覆盖较好、一般无需再补(仅作说明)
- -- - student_assignment:uk(assignment_id, student_id) + idx(student_id, assignment_id)
- -- - evaluation / overall_evaluation / sentence_evaluation:唯一键与 idx_student_assignment
- -- - student_assignment_history:uk 与 idx(assignment, student, submit_time)
- -- - translations、sign_*、class:已有合适索引
- -- =============================================================================
|