-- 迁移: 006_add_performance_indexes.sql
-- 目的: 为常用查询字段添加索引，提升查询性能
-- 日期: 2026-04-24

-- ============================================
-- weather_data 表索引
-- ============================================

-- 索引：加速按用户查询天气数据列表
-- 用途：GET /weather 接口按 user_id + date 排序查询
CREATE INDEX IF NOT EXISTS idx_weather_data_user_id ON weather_data(user_id);

-- 索引：加速按日期排序查询
-- 用途：列表查询默认按 date DESC, hour DESC, min DESC 排序
CREATE INDEX IF NOT EXISTS idx_weather_data_date ON weather_data(date DESC);

-- 索引：加速用户收藏列表查询
-- 用途：GET /api/favorites 查询 user_id + is_favorite = true
CREATE INDEX IF NOT EXISTS idx_weather_data_user_favorite ON weather_data(user_id, is_favorite);

-- 索引：复合索引加速用户数据列表（无需额外排序）
-- 用途：用户历史记录查询
CREATE INDEX IF NOT EXISTS idx_weather_data_user_date ON weather_data(user_id, date DESC);

-- ============================================
-- users 表索引
-- ============================================

-- 索引：加速 openid 查询（登录时高频使用）
-- 注意：openid 可能已有 UNIQUE 约束自动创建索引，此处确保存在
CREATE INDEX IF NOT EXISTS idx_users_openid ON users(openid);

-- ============================================
-- payment_orders 表索引（补充）
-- ============================================

-- 索引：加速按状态查询待处理订单
-- 用途：管理员查询 pending 状态订单
CREATE INDEX IF NOT EXISTS idx_payment_orders_status ON payment_orders(status);

-- ============================================
-- web_login_codes 表索引（来自 005）
-- ============================================

-- 确保 web_login_codes 表索引存在（05已创建，此处确保兼容性）
-- 登录码查询和过期清理
CREATE INDEX IF NOT EXISTS idx_web_login_codes_code ON web_login_codes(code);
CREATE INDEX IF NOT EXISTS idx_web_login_codes_expires_at ON web_login_codes(expires_at);

COMMENT ON TABLE weather_data IS '添加性能索引：user_id、date、is_favorite';
