optimize_fs_course_watch_log.sql 4.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. -- ======================================================
  2. -- fs_course_watch_log 索引优化(不锁表操作)
  3. -- MySQL 8.0.30+,使用 ALGORITHM=INPLACE, LOCK=NONE
  4. -- 建议在业务低峰期执行,逐条或分批
  5. -- ======================================================
  6. -- ==================== 第一批:删除冗余索引 ====================
  7. -- 单列索引(被复合索引前缀覆盖,冗余)
  8. ALTER TABLE fs_course_watch_log DROP INDEX user_id, ALGORITHM=INPLACE, LOCK=NONE;
  9. ALTER TABLE fs_course_watch_log DROP INDEX index_video_id, ALGORITHM=INPLACE, LOCK=NONE;
  10. ALTER TABLE fs_course_watch_log DROP INDEX index_log_type, ALGORITHM=INPLACE, LOCK=NONE;
  11. ALTER TABLE fs_course_watch_log DROP INDEX index_company_id, ALGORITHM=INPLACE, LOCK=NONE;
  12. ALTER TABLE fs_course_watch_log DROP INDEX index_company_user_id, ALGORITHM=INPLACE, LOCK=NONE;
  13. ALTER TABLE fs_course_watch_log DROP INDEX index_reward_type, ALGORITHM=INPLACE, LOCK=NONE;
  14. ALTER TABLE fs_course_watch_log DROP INDEX index_send_msg, ALGORITHM=INPLACE, LOCK=NONE;
  15. ALTER TABLE fs_course_watch_log DROP INDEX qw_user_id, ALGORITHM=INPLACE, LOCK=NONE;
  16. ALTER TABLE fs_course_watch_log DROP INDEX qw_external_contact_id, ALGORITHM=INPLACE, LOCK=NONE;
  17. -- 重复/重叠复合索引
  18. ALTER TABLE fs_course_watch_log DROP INDEX idx_user_video_qw_user, ALGORITHM=INPLACE, LOCK=NONE;
  19. ALTER TABLE fs_course_watch_log DROP INDEX idx_company_logid, ALGORITHM=INPLACE, LOCK=NONE;
  20. ALTER TABLE fs_course_watch_log DROP INDEX idx_create_company_user, ALGORITHM=INPLACE, LOCK=NONE;
  21. ALTER TABLE fs_course_watch_log DROP INDEX idx_w_ctime_course_vid_uid_log, ALGORITHM=INPLACE, LOCK=NONE;
  22. ALTER TABLE fs_course_watch_log DROP INDEX sendTypeAndCreate, ALGORITHM=INPLACE, LOCK=NONE;
  23. ALTER TABLE fs_course_watch_log DROP INDEX index_0, ALGORITHM=INPLACE, LOCK=NONE;
  24. ALTER TABLE fs_course_watch_log DROP INDEX idx_fwl_video_user_logtype, ALGORITHM=INPLACE, LOCK=NONE;
  25. ALTER TABLE fs_course_watch_log DROP INDEX index_2, ALGORITHM=INPLACE, LOCK=NONE;
  26. ALTER TABLE fs_course_watch_log DROP INDEX idx_send_type_log, ALGORITHM=INPLACE, LOCK=NONE;
  27. ALTER TABLE fs_course_watch_log DROP INDEX idx_covering_watch, ALGORITHM=INPLACE, LOCK=NONE;
  28. ALTER TABLE fs_course_watch_log DROP INDEX idx_covering_date_stats, ALGORITHM=INPLACE, LOCK=NONE;
  29. ALTER TABLE fs_course_watch_log DROP INDEX idx_group_company, ALGORITHM=INPLACE, LOCK=NONE;
  30. ALTER TABLE fs_course_watch_log DROP INDEX idx_ultimate_watch, ALGORITHM=INPLACE, LOCK=NONE;
  31. -- ==================== 第二批:新增核心索引 ====================
  32. -- 1. 看课状态查询 + 批量更新(video_id, user_id, company_user_id)
  33. -- 涵盖:getWatchLogByFsUser, batchUpdateFsUserWatchLog, batchUpdateWatchLogIsOpen
  34. ALTER TABLE fs_course_watch_log
  35. ADD INDEX idx_video_user_cu (video_id, user_id, company_user_id),
  36. ALGORITHM=INPLACE, LOCK=NONE;
  37. -- 2. 统计列表 + 定时任务按公司统计
  38. -- 涵盖:selectFsCourseWatchLogStatisticsListVONew, watchCourseStatisticsGroupByCompany
  39. ALTER TABLE fs_course_watch_log
  40. ADD INDEX idx_send_time_company (send_type, create_time, company_id),
  41. ALGORITHM=INPLACE, LOCK=NONE;
  42. -- 3. 用户维度聚合查询(7天/15天统计)
  43. -- 涵盖:getUserWatchStatusAndLastWatchDate, FsUserCourseCountMapper 相关查询
  44. ALTER TABLE fs_course_watch_log
  45. ADD INDEX idx_uid_send_time_proj (user_id, send_type, create_time, project),
  46. ALGORITHM=INPLACE, LOCK=NONE;
  47. -- 4. 销售维度 count/统计(company_user_id + log_type + 时间范围)
  48. -- 涵盖:countByMap, queryCompanyUserWatchCount, queryCompanyUserWatchCountCompleted, queryCompanyUserInterruptCount
  49. ALTER TABLE fs_course_watch_log
  50. ADD INDEX idx_cu_logtype_time (company_user_id, log_type, create_time),
  51. ALGORITHM=INPLACE, LOCK=NONE;
  52. -- 5. 营期 + 销售查询
  53. -- 涵盖:queryCompanyUserWatchCount(camp_period_time过滤)
  54. ALTER TABLE fs_course_watch_log
  55. ADD INDEX idx_cu_camp_log (company_user_id, camp_period_time, log_type),
  56. ALGORITHM=INPLACE, LOCK=NONE;
  57. -- ==================== 验证 ====================
  58. -- 执行后查看最终索引列表
  59. -- SHOW INDEX FROM fs_course_watch_log;
  60. --
  61. -- 最终保留索引(共12个):
  62. -- 1. PRIMARY (log_id)
  63. -- 2. UNIQUE one_user (video_id, qw_external_contact_id, qw_user_id)
  64. -- 3. index_finish_time (finish_time)
  65. -- 4. create_time (create_time)
  66. -- 5. idx_period_id (period_id)
  67. -- 6. index_1 (sop_id, log_type)
  68. -- 7. idx_video_user_cu (video_id, user_id, company_user_id) [NEW]
  69. -- 8. idx_send_time_company(send_type, create_time, company_id) [NEW]
  70. -- 9. idx_uid_send_time_proj(user_id, send_type, create_time, project) [NEW]
  71. -- 10. idx_cu_logtype_time (company_user_id, log_type, create_time) [NEW]
  72. -- 11. idx_cu_camp_log (company_user_id, camp_period_time, log_type) [NEW]
  73. -- 12. idx_finish_time (finish_time)