mcpField
D
django-index-design

django-index-design

github.com/lvtd-llc数据与数据库163 次安装7 周前更新
代码仓库

关于 django-index-design

django-index-design 是帮助开发者通过索引优化 Django 查询的技能。它从查询计划出发,指导索引选择与迁移方式,并要求在接近生产的数据上验证效果和运维风险。

主要功能

  1. 01先分析目标查询
  2. 02按过滤条件和排序选择索引
  3. 03在模型或迁移中定义索引
  4. 04使用接近生产的数据验证计划
  5. 05评估写入、锁定与回滚风险

适用场景

  1. 01优化经测量确认的慢查询
  2. 02为在线 PostgreSQL 表添加索引
  3. 03检查索引迁移的安全性
  4. 04核查生产使用情况后移除索引

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lvtd-llc/skills --skill django-index-design

安装后在 Claude Code 中输入/django-index-design确认已加载。

附带文件references/index-patterns.md

详细介绍

Django 索引设计

只有在性能分析表明特定查询能从中受益后,才使用此技能添加或修改索引。索引可以加快特定读取和约束检查,但会增加写入开销、迁移风险和维护成本。

工作流

  1. 从查询计划入手。

    • 收集 SQL、筛选条件、联接、排序方式、选取的列、表大小和现有索引。
    • 确认该查询值得优化。
  2. 选择索引类型。

    • 优先考虑等值筛选条件,其次是在有用时考虑范围或排序字段。
    • 尽可能为 LIMIT 查询匹配 ORDER BY。
    • 对频繁查询的子集使用部分索引。
    • 仅当选取的列稳定且有可能进行仅索引扫描时,才使用覆盖索引。
    • 对 JSONB 包含查询、数组和全文搜索模式使用 GIN;不要指望 B-tree 能解决这些问题。
  3. 在 Django 模型或迁移中定义索引。

    • 对常规的模型自有索引,优先使用 Meta.indexes。
    • 对运行中的 PostgreSQL 表,优先使用 AddIndexConcurrently 和 RemoveIndexConcurrently。
    • 只有在 Django 无法表达该索引时,才使用原始 SQL。
  4. 使用接近生产环境的数据进行验证。

    • 重新运行 QuerySet.explain() 或 EXPLAIN ANALYZE。
    • 确认查询规划器会对目标查询使用该索引。
    • 如果索引所在表写入频繁,检查其对写入路径的影响。

有关索引示例和迁移模板,请参阅 index-patterns.md。

生产环境规则

  • 对于运行中的 PostgreSQL 表,使用并发索引操作,并将迁移的 atomic = False。
  • 索引名称应简短、稳定且明确。
  • 不要添加已被唯一约束或左前缀复合索引覆盖的重复索引。
  • 只有在检查生产环境中的使用情况和部署回滚需求后,才移除未使用的索引。

验证

最后提供优化前后的查询计划证据、确切的迁移操作,以及针对锁、写入和回滚的运维风险评估。

评论

支持 Markdown