关于 django-index-design
django-index-design 是帮助开发者通过索引优化 Django 查询的技能。它从查询计划出发,指导索引选择与迁移方式,并要求在接近生产的数据上验证效果和运维风险。
主要功能
- 01先分析目标查询
- 02按过滤条件和排序选择索引
- 03在模型或迁移中定义索引
- 04使用接近生产的数据验证计划
- 05评估写入、锁定与回滚风险
适用场景
- 01优化经测量确认的慢查询
- 02为在线 PostgreSQL 表添加索引
- 03检查索引迁移的安全性
- 04核查生产使用情况后移除索引
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill django-index-design安装后在 Claude Code 中输入/django-index-design确认已加载。
附带文件references/index-patterns.md
详细介绍
Django 索引设计
只有在性能分析表明特定查询能从中受益后,才使用此技能添加或修改索引。索引可以加快特定读取和约束检查,但会增加写入开销、迁移风险和维护成本。
工作流
-
从查询计划入手。
- 收集 SQL、筛选条件、联接、排序方式、选取的列、表大小和现有索引。
- 确认该查询值得优化。
-
选择索引类型。
- 优先考虑等值筛选条件,其次是在有用时考虑范围或排序字段。
- 尽可能为
LIMIT查询匹配ORDER BY。 - 对频繁查询的子集使用部分索引。
- 仅当选取的列稳定且有可能进行仅索引扫描时,才使用覆盖索引。
- 对 JSONB 包含查询、数组和全文搜索模式使用 GIN;不要指望 B-tree 能解决这些问题。
-
在 Django 模型或迁移中定义索引。
- 对常规的模型自有索引,优先使用
Meta.indexes。 - 对运行中的 PostgreSQL 表,优先使用
AddIndexConcurrently和RemoveIndexConcurrently。 - 只有在 Django 无法表达该索引时,才使用原始 SQL。
- 对常规的模型自有索引,优先使用
-
使用接近生产环境的数据进行验证。
- 重新运行
QuerySet.explain()或EXPLAIN ANALYZE。 - 确认查询规划器会对目标查询使用该索引。
- 如果索引所在表写入频繁,检查其对写入路径的影响。
- 重新运行
有关索引示例和迁移模板,请参阅 index-patterns.md。
生产环境规则
- 对于运行中的 PostgreSQL 表,使用并发索引操作,并将迁移的
atomic = False。 - 索引名称应简短、稳定且明确。
- 不要添加已被唯一约束或左前缀复合索引覆盖的重复索引。
- 只有在检查生产环境中的使用情况和部署回滚需求后,才移除未使用的索引。
验证
最后提供优化前后的查询计划证据、确切的迁移操作,以及针对锁、写入和回滚的运维风险评估。
评论
支持 Markdown