mysql_suggested_indexes.sql 4.5 KB

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