2
0

database-indexes.md 4.8 KB

数据统计模块数据库索引优化建议

概述

为了优化数据统计API的查询性能,建议为以下字段添加数据库索引。这些索引将显著提高统计查询的速度,特别是在大数据量下。

推荐索引列表

1. 残疾类型分布统计 (disabled_person表)

  • 字段: disability_type
  • 索引类型: B树索引
  • 理由: 用于GROUP BY disability_type分组统计
  • SQL:

    CREATE INDEX idx_disabled_person_disability_type ON disabled_person(disability_type);
    

2. 性别分布统计 (disabled_person表)

  • 字段: gender
  • 索引类型: B树索引
  • 理由: 用于GROUP BY gender分组统计
  • SQL:

    CREATE INDEX idx_disabled_person_gender ON disabled_person(gender);
    

3. 年龄分布统计 (disabled_person表)

  • 字段: birth_date
  • 索引类型: B树索引
  • 理由: 用于年龄计算和分组,基于birth_date字段计算年龄
  • SQL:

    CREATE INDEX idx_disabled_person_birth_date ON disabled_person(birth_date);
    

4. 户籍分布统计 (disabled_person表)

  • 字段: household_province, household_city
  • 索引类型: 复合索引
  • 理由: 用于按省、市分组统计户籍分布
  • 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:

    CREATE INDEX idx_disabled_person_job_status ON disabled_person(job_status);
    

6. 薪资分布统计 (order_person表)

  • 字段: salary_detail
  • 索引类型: B树索引
  • 理由: 用于薪资范围分组统计
  • SQL:

    CREATE INDEX idx_order_person_salary_detail ON order_person(salary_detail);
    

7. 视频类型统计 (order_person_asset表)

  • 字段: asset_type
  • 索引类型: B树索引
  • 理由: 用于按视频类型分组统计(打卡视频、薪资视频等)
  • SQL:

    CREATE INDEX idx_order_person_asset_asset_type ON order_person_asset(asset_type);
    

8. 企业数据关联索引

8.1 employment_order

  • 字段: company_id
  • 索引类型: B树索引
  • 理由: 用于企业数据隔离过滤
  • SQL:

    CREATE INDEX idx_employment_order_company_id ON employment_order(company_id);
    

8.2 order_person

  • 字段: order_id, disabled_person_id
  • 索引类型: 复合索引
  • 理由: 用于关联查询和统计
  • 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:

    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和内存使用率
  • 索引命中率
  • 慢查询数量

本文件为数据库索引优化建议,具体实施需根据实际数据库性能和业务需求调整。