USE cattletrade;

-- 为 warning_log 表添加索引以优化预警列表查询性能
-- 优化目标：getPageWarningLog 查询中的派生表查询和 JOIN 操作
-- 
-- 执行说明：
-- 1. 先执行检查脚本查看现有索引：SHOW INDEX FROM warning_log;
-- 2. 如果索引已存在，会报错 "Duplicate key name"，可以忽略该错误或注释掉对应语句
-- 3. 建议按顺序执行，遇到已存在的索引错误时跳过即可

-- ============================================
-- 第一步：检查现有索引（可选）
-- ============================================
-- 执行以下命令查看 warning_log 表的所有索引：
-- SHOW INDEX FROM warning_log;

-- ============================================
-- 第二步：创建索引（所有索引已存在，已全部注释）
-- ============================================
-- ✅ 状态：所有需要的索引已经存在，无需再次创建
-- 如需重新创建，请先删除现有索引：DROP INDEX idx_name ON warning_log;

-- 1. 添加 delivery_id 和 warning_type 的联合索引（用于派生表的 GROUP BY 查询）
-- 这个索引可以大幅提升 "SELECT delivery_id, warning_type, MAX(id) FROM warning_log WHERE warning_type IN (...) GROUP BY delivery_id, warning_type" 的性能
-- ✅ 索引已存在：idx_delivery_warning_type
-- ALTER TABLE warning_log 
-- ADD INDEX idx_delivery_warning_type (delivery_id, warning_type, id);

-- 2. 添加 warning_time 索引（用于 ORDER BY 排序）
-- ✅ 索引已存在：idx_warning_time
-- ALTER TABLE warning_log 
-- ADD INDEX idx_warning_time (warning_time DESC);

-- 3. 如果 delivery_id 还没有单独索引，添加一个（用于 JOIN 操作）
-- 注意：如果 delivery_id 已经是主键或唯一索引的一部分，可以跳过
-- 检查现有索引：SHOW INDEX FROM warning_log;
-- 如果 delivery_id 没有索引，执行下面的语句
-- ALTER TABLE warning_log ADD INDEX idx_delivery_id (delivery_id);

-- ============================================
-- 索引说明和性能优化效果
-- ============================================
-- 
-- 已存在的索引：
-- 1. idx_delivery_warning_type: 覆盖索引，支持 WHERE warning_type IN (...) GROUP BY delivery_id, warning_type 的查询
-- 2. idx_warning_time: 支持 ORDER BY warning_time DESC 的排序操作
-- 
-- 性能提升效果：
-- ✅ 派生表查询从全表扫描优化为索引扫描
-- ✅ GROUP BY 操作可以使用索引，避免临时表排序
-- ✅ ORDER BY 可以使用索引，避免文件排序
-- 
-- ============================================
-- 验证索引是否生效
-- ============================================
-- 执行以下 SQL 验证索引：
-- SHOW INDEX FROM warning_log WHERE Key_name IN ('idx_delivery_warning_type', 'idx_warning_time');
-- 
-- 使用 EXPLAIN 分析查询性能：
-- EXPLAIN SELECT ... (使用优化后的 getPageWarningLog SQL)
-- 
-- 注意：所有索引已创建完成，脚本保留作为文档参考

