-- ============================================================================
-- opsdev 模块数据库索引优化脚本
-- 生成时间: 2026-05-28
-- 目标库: dashoo_oms
-- 说明: 当前核心查询表几乎零索引，全部走全表扫描，前台查询慢。
--       数据量不大(最大 4231 行)，索引开销可忽略。
-- 注意: 每条 ALTER 独立执行，单条失败不影响后续。
-- ============================================================================

-- ============================================================================
-- 1. ops_delivery_project — 交付项目（所有列表查询核心表，0 索引）
--    影响: GetList / GetListAll / GetDelegatedProjectList / 项目盘点
-- ============================================================================
ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_delivery_user (deleted_time, delivery_user_id);
ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_project_status (deleted_time, project_status);
ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_product_line (deleted_time, product_line);
ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_sales_user (deleted_time, sales_user_id);
ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_contract (deleted_time, contract_id);
ALTER TABLE ops_delivery_project ADD INDEX idx_deleted_attr4 (deleted_time, attribute4);
ALTER TABLE ops_delivery_project ADD INDEX idx_contract_no (contract_no);

-- ============================================================================
-- 2. ops_operation_event — 运维事件（列表/历史/看板/统计，0 索引）
--    影响: GetList / GetHistoryList / GetKanbanData / GetStats / Export
-- ============================================================================
ALTER TABLE ops_operation_event ADD INDEX idx_event_status_deleted (event_status, deleted_time);
ALTER TABLE ops_operation_event ADD INDEX idx_ops_user_deleted (ops_user_id, deleted_time);
ALTER TABLE ops_operation_event ADD INDEX idx_feedback_date (feedback_date);
ALTER TABLE ops_operation_event ADD INDEX idx_contract_deleted (contract_id, deleted_time);

-- ============================================================================
-- 3. ops_event_task_work_hour — 研发任务工时（看板核心表，0 索引）
--    影响: GetDashboardData (周视图工时汇总)
-- ============================================================================
ALTER TABLE ops_event_task_work_hour ADD INDEX idx_user_date_deleted (ops_user_id, actual_work_date, deleted_time);
ALTER TABLE ops_event_task_work_hour ADD INDEX idx_task_deleted (task_id, deleted_time);

-- ============================================================================
-- 4. ops_event_task — 研发任务（已有部分索引，补关键复合索引）
--    影响: GetList / GetDashboardData / GetScheduleStats
-- ============================================================================
ALTER TABLE ops_event_task ADD INDEX idx_ops_user_plan (ops_user_id, deleted_time, plan_start_time);
ALTER TABLE ops_event_task ADD INDEX idx_plan_end_status (plan_end_time, task_status, deleted_time);
ALTER TABLE ops_event_task ADD INDEX idx_event_type_id (event_type, event_id, deleted_time);

-- ============================================================================
-- 5. 记录表 — 外键查询全表扫描
-- ============================================================================
ALTER TABLE ops_event_task_record ADD INDEX idx_task_id (task_id);
ALTER TABLE ops_delivery_project_event_record ADD INDEX idx_delivery_event_id (delivery_event_id);
ALTER TABLE ops_operation_event_record ADD INDEX idx_event_id (event_id);

-- ============================================================================
-- 6. 附件表 — 外键查询全表扫描
-- ============================================================================
ALTER TABLE ops_delivery_project_event_attachment ADD INDEX idx_delivery_event_id (delivery_event_id);
ALTER TABLE ops_delivery_project_event_attachment ADD INDEX idx_event_record_id (event_record_id);
ALTER TABLE ops_operation_event_attachment ADD INDEX idx_event_id (event_id);
ALTER TABLE ops_operation_event_attachment ADD INDEX idx_event_record_id (event_record_id);
ALTER TABLE ops_event_task_attachment ADD INDEX idx_task_id (task_id);
ALTER TABLE ops_event_task_attachment ADD INDEX idx_task_record_id (task_record_id);

-- ============================================================================
-- 7. ops_operation_work_hour — 运维工时（统计 UNION ALL 查询）
-- ============================================================================
ALTER TABLE ops_operation_work_hour ADD INDEX idx_work_date_deleted (work_date, deleted_time);

-- ============================================================================
-- 8. ctr_contract — 合同表（项目盘点 LEFT JOIN）
-- ============================================================================
ALTER TABLE ctr_contract ADD INDEX idx_contract_code (contract_code);

-- ============================================================================
-- 9. 补充: base_region_auth 索引可能不匹配查询条件
--    当前索引: (user_id, sale_region_id)
--    实际查询: user_id = ? AND city_id = sales_region_id (用的是 city_id 列)
--    当前数据量小影响不大，但建议确认后调整。
--    ALTER TABLE base_region_auth ADD INDEX idx_user_city (user_id, city_id);
-- ============================================================================
