-- 为 province_daily_price 表添加索引以优化 SQL 查询速度
-- 注意：如果索引已存在，执行会报错（Duplicate key name），可以忽略或先检查再创建

-- 检查索引是否存在的存储过程（可选，用于安全创建）
-- 如果不想使用存储过程，可以直接执行下面的 CREATE INDEX 语句
-- 如果索引已存在，会报错但不会影响其他索引的创建

-- 1. 复合索引：省份 + 日期（用于按省份和日期范围查询和排序）
-- 注意：虽然已有 UNIQUE KEY `uk_province_date`，但添加单独的索引可以优化某些查询场景
CREATE INDEX `idx_province_date_composite` ON `province_daily_price` (`province`, `price_date` DESC);

-- 2. 价格索引（用于按价格范围查询和排序）
CREATE INDEX `idx_price` ON `province_daily_price` (`price`);

-- 3. 复合索引：日期 + 价格（用于按日期和价格范围查询）
CREATE INDEX `idx_date_price` ON `province_daily_price` (`price_date`, `price`);

-- 4. 复合索引：省份 + 价格（用于按省份和价格范围查询）
CREATE INDEX `idx_province_price` ON `province_daily_price` (`province`, `price`);

-- 5. 更新时间索引（用于按更新时间排序和查询）
CREATE INDEX `idx_up_time` ON `province_daily_price` (`up_time`);

-- 6. 创建时间索引（用于按创建时间排序和查询）
CREATE INDEX `idx_create_time` ON `province_daily_price` (`create_time`);

-- 验证索引
-- SHOW INDEX FROM province_daily_price;

-- 查看表结构
-- SHOW CREATE TABLE province_daily_price;

-- 查看索引使用情况（需要先执行一些查询）
-- EXPLAIN SELECT * FROM province_daily_price WHERE province = '内蒙古' ORDER BY price_date DESC;
-- EXPLAIN SELECT * FROM province_daily_price WHERE price_date BETWEEN '2025-12-01' AND '2025-12-07';
-- EXPLAIN SELECT * FROM province_daily_price WHERE province = '内蒙古' AND price BETWEEN 13.0 AND 15.0;

