opsdev_index_optimization.sql 5.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. -- ============================================================================
  2. -- opsdev 模块数据库索引优化脚本
  3. -- 生成时间: 2026-05-28
  4. -- 目标库: dashoo_oms
  5. -- 说明: 当前核心查询表几乎零索引,全部走全表扫描,前台查询慢。
  6. -- 数据量不大(最大 4231 行),索引开销可忽略。
  7. -- 注意: 每条 ALTER 独立执行,单条失败不影响后续。
  8. -- ============================================================================
  9. -- ============================================================================
  10. -- 1. ops_delivery_project — 交付项目(所有列表查询核心表,0 索引)
  11. -- 影响: GetList / GetListAll / GetDelegatedProjectList / 项目盘点
  12. -- ============================================================================
  13. ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_delivery_user (deleted_time, delivery_user_id);
  14. ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_project_status (deleted_time, project_status);
  15. ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_product_line (deleted_time, product_line);
  16. ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_sales_user (deleted_time, sales_user_id);
  17. ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_contract (deleted_time, contract_id);
  18. ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_attr4 (deleted_time, attribute4);
  19. ALTER TABLE ops_delivery_project ADD INDEX idx_contract_no (contract_no);
  20. -- ============================================================================
  21. -- 2. ops_operation_event — 运维事件(列表/历史/看板/统计,0 索引)
  22. -- 影响: GetList / GetHistoryList / GetKanbanData / GetStats / Export
  23. -- ============================================================================
  24. ALTER TABLE ops_operation_event ADD INDEX idx_event_status_deleted (event_status, deleted_time);
  25. ALTER TABLE ops_operation_event ADD INDEX idx_ops_user_deleted (ops_user_id, deleted_time);
  26. ALTER TABLE ops_operation_event ADD INDEX idx_feedback_date (feedback_date);
  27. ALTER TABLE ops_operation_event ADD INDEX idx_contract_deleted (contract_id, deleted_time);
  28. -- ============================================================================
  29. -- 3. ops_event_task_work_hour — 研发任务工时(看板核心表,0 索引)
  30. -- 影响: GetDashboardData (周视图工时汇总)
  31. -- ============================================================================
  32. ALTER TABLE ops_event_task_work_hour ADD INDEX idx_user_date_deleted (ops_user_id, actual_work_date, deleted_time);
  33. ALTER TABLE ops_event_task_work_hour ADD INDEX idx_task_deleted (task_id, deleted_time);
  34. -- ============================================================================
  35. -- 4. ops_event_task — 研发任务(已有部分索引,补关键复合索引)
  36. -- 影响: GetList / GetDashboardData / GetScheduleStats
  37. -- ============================================================================
  38. ALTER TABLE ops_event_task ADD INDEX idx_ops_user_plan (ops_user_id, deleted_time, plan_start_time);
  39. ALTER TABLE ops_event_task ADD INDEX idx_plan_end_status (plan_end_time, task_status, deleted_time);
  40. ALTER TABLE ops_event_task ADD INDEX idx_event_type_id (event_type, event_id, deleted_time);
  41. -- ============================================================================
  42. -- 5. 记录表 — 外键查询全表扫描
  43. -- ============================================================================
  44. ALTER TABLE ops_event_task_record ADD INDEX idx_task_id (task_id);
  45. ALTER TABLE ops_delivery_project_event_record ADD INDEX idx_delivery_event_id (delivery_event_id);
  46. ALTER TABLE ops_operation_event_record ADD INDEX idx_event_id (event_id);
  47. -- ============================================================================
  48. -- 6. 附件表 — 外键查询全表扫描
  49. -- ============================================================================
  50. ALTER TABLE ops_delivery_project_event_attachment ADD INDEX idx_delivery_event_id (delivery_event_id);
  51. ALTER TABLE ops_delivery_project_event_attachment ADD INDEX idx_event_record_id (event_record_id);
  52. ALTER TABLE ops_operation_event_attachment ADD INDEX idx_event_id (event_id);
  53. ALTER TABLE ops_operation_event_attachment ADD INDEX idx_event_record_id (event_record_id);
  54. ALTER TABLE ops_event_task_attachment ADD INDEX idx_task_id (task_id);
  55. ALTER TABLE ops_event_task_attachment ADD INDEX idx_task_record_id (task_record_id);
  56. -- ============================================================================
  57. -- 7. ops_operation_work_hour — 运维工时(统计 UNION ALL 查询)
  58. -- ============================================================================
  59. ALTER TABLE ops_operation_work_hour ADD INDEX idx_work_date_deleted (work_date, deleted_time);
  60. -- ============================================================================
  61. -- 8. ctr_contract — 合同表(项目盘点 LEFT JOIN)
  62. -- ============================================================================
  63. ALTER TABLE ctr_contract ADD INDEX idx_contract_code (contract_code);
  64. -- ============================================================================
  65. -- 9. 补充: base_region_auth 索引可能不匹配查询条件
  66. -- 当前索引: (user_id, sale_region_id)
  67. -- 实际查询: user_id = ? AND city_id = sales_region_id (用的是 city_id 列)
  68. -- 当前数据量小影响不大,但建议确认后调整。
  69. -- ALTER TABLE base_region_auth ADD INDEX idx_user_city (user_id, city_id);
  70. -- ============================================================================