# 数据统计模块数据库索引优化建议 ## 概述 为了优化数据统计API的查询性能,建议为以下字段添加数据库索引。这些索引将显著提高统计查询的速度,特别是在大数据量下。 ## 推荐索引列表 ### 1. 残疾类型分布统计 (`disabled_person`表) - **字段**: `disability_type` - **索引类型**: B树索引 - **理由**: 用于`GROUP BY disability_type`分组统计 - **SQL**: ```sql CREATE INDEX idx_disabled_person_disability_type ON disabled_person(disability_type); ``` ### 2. 性别分布统计 (`disabled_person`表) - **字段**: `gender` - **索引类型**: B树索引 - **理由**: 用于`GROUP BY gender`分组统计 - **SQL**: ```sql CREATE INDEX idx_disabled_person_gender ON disabled_person(gender); ``` ### 3. 年龄分布统计 (`disabled_person`表) - **字段**: `birth_date` - **索引类型**: B树索引 - **理由**: 用于年龄计算和分组,基于`birth_date`字段计算年龄 - **SQL**: ```sql CREATE INDEX idx_disabled_person_birth_date ON disabled_person(birth_date); ``` ### 4. 户籍分布统计 (`disabled_person`表) - **字段**: `household_province`, `household_city` - **索引类型**: 复合索引 - **理由**: 用于按省、市分组统计户籍分布 - **SQL**: ```sql CREATE INDEX idx_disabled_person_household_location ON disabled_person(household_province, household_city); ``` ### 5. 在职状态分布统计 (`disabled_person`表) - **字段**: `job_status` - **索引类型**: B树索引 - **理由**: 用于`GROUP BY job_status`分组统计 - **SQL**: ```sql CREATE INDEX idx_disabled_person_job_status ON disabled_person(job_status); ``` ### 6. 薪资分布统计 (`order_person`表) - **字段**: `salary_detail` - **索引类型**: B树索引 - **理由**: 用于薪资范围分组统计 - **SQL**: ```sql CREATE INDEX idx_order_person_salary_detail ON order_person(salary_detail); ``` ### 7. 视频类型统计 (`order_person_asset`表) - **字段**: `asset_type` - **索引类型**: B树索引 - **理由**: 用于按视频类型分组统计(打卡视频、薪资视频等) - **SQL**: ```sql CREATE INDEX idx_order_person_asset_asset_type ON order_person_asset(asset_type); ``` ### 8. 企业数据关联索引 #### 8.1 `employment_order`表 - **字段**: `company_id` - **索引类型**: B树索引 - **理由**: 用于企业数据隔离过滤 - **SQL**: ```sql CREATE INDEX idx_employment_order_company_id ON employment_order(company_id); ``` #### 8.2 `order_person`表 - **字段**: `order_id`, `disabled_person_id` - **索引类型**: 复合索引 - **理由**: 用于关联查询和统计 - **SQL**: ```sql CREATE INDEX idx_order_person_association ON order_person(order_id, disabled_person_id); ``` #### 8.3 `order_person_asset`表 - **字段**: `order_person_id` - **索引类型**: B树索引 - **理由**: 用于关联订单人员资产 - **SQL**: ```sql CREATE INDEX idx_order_person_asset_order_person_id ON order_person_asset(order_person_id); ``` ### 9. 复合索引优化(用于复杂统计查询) #### 9.1 企业维度残疾人统计 - **表**: `disabled_person`通过`order_person`关联`employment_order` - **字段**: `company_id` + 统计字段 - **理由**: 优化企业维度的复合统计查询 - **建议**: 考虑物化视图或覆盖索引 ## 性能优化建议 ### 1. 查询优化策略 - 使用CTE(Common Table Expressions)优化复杂年龄分组查询 - 对于大数据量统计,考虑定期生成物化视图 - 实现查询结果缓存机制,特别是对于变化不频繁的统计结果 ### 2. 监控与调优 - 监控慢查询日志,识别性能瓶颈 - 定期分析索引使用情况,移除未使用的索引 - 考虑分区表策略,按时间或企业ID分区 ### 3. 应用层优化 - 实现分页和增量统计,避免一次性加载大量数据 - 添加查询超时和取消机制 - 对高频统计接口实施限流和缓存 ## 实施优先级 ### 高优先级(直接影响核心功能) 1. `disabled_person.disability_type`索引 2. `disabled_person.gender`索引 3. `employment_order.company_id`索引(企业数据隔离) 4. `order_person.salary_detail`索引 ### 中优先级(提升查询性能) 1. `disabled_person.birth_date`索引 2. `disabled_person.household_province, household_city`复合索引 3. `order_person_asset.asset_type`索引 ### 低优先级(优化关联查询) 1. `order_person.order_id, disabled_person_id`复合索引 2. `order_person_asset.order_person_id`索引 ## 注意事项 1. 在生产环境添加索引时,建议在低峰期进行 2. 索引会增加写操作的开销,需权衡读写比例 3. 定期维护索引(重建、重新统计) 4. 测试环境先行验证索引效果 ## 监控指标 - 统计查询平均响应时间 - 数据库CPU和内存使用率 - 索引命中率 - 慢查询数量 --- *本文件为数据库索引优化建议,具体实施需根据实际数据库性能和业务需求调整。*